String 递归:将最大ASCII值的字符移到第一个索引,将剩余的字符序列再移一次;

String 递归:将最大ASCII值的字符移到第一个索引,将剩余的字符序列再移一次;,string,recursion,String,Recursion,例如,输出应该是shiftMaxChar(“acbxdyfjzdmk”)-->(“zacbxdyfjdmk”) 现在我只是在检查'Z'和'Z'。 我没有主意,如何认识我的问题 如果有任何提示,我会非常感激 private static String shiftMaxChar(String s){ assert s != null; String sub = ""; if(s.isEmpty()) return s; for (int i = 0; i

例如,输出应该是shiftMaxChar(“acbxdyfjzdmk”)-->(“zacbxdyfjdmk”)

现在我只是在检查'Z'和'Z'。 我没有主意,如何认识我的问题

如果有任何提示,我会非常感激

 private static String shiftMaxChar(String s){
       assert s != null;
   String sub = "";


    if(s.isEmpty()) return s;


    for (int i = 0; i < s.length() ; i++) {
      if(s.charAt(i) == 90 || s.charAt(i) == 122) {
          char max = s.charAt(i);
          sub = shiftMaxChar(s.substring(0) + max + s.substring(1, s.length() - 1));
      }
    }

return  sub;

 public static void main(String[] args) {
    System.out.println(shiftMaxChar("\"acbxdyf jzdmk\"" ));
    System.out.println(shiftMaxChar("\"\""));
私有静态字符串移位最大值(字符串s){
断言s!=null;
字符串sub=“”;
如果(s.isEmpty())返回s;
对于(int i=0;i
我们可以通过假设前面的调用已经对字符串的其余部分执行了此操作来完成此操作

JavaScript代码:

函数f(s){
如果(s.长度<2)
返回s;
设rest=f(s.substr(1));
如果(s[0]console.log(f(“acbxdyfjzdmk”);
我找到了以下解决方案:

private static String shiftMaxChar(String s) {
    assert s != null;

    if (s.isEmpty()) {return s;}


    char ascii = s.charAt(0);
    char asciiEnd = s.charAt(s.length() - 1);
    if (ascii < asciiEnd) {
        String sub = shiftMaxChar(s.substring(1));
        return sub.charAt(0) + ( ascii + sub.substring(1, s.length() - 1));

    } else{
        return shiftMaxChar(s.substring(0, s.length() - 1)) + asciiEnd;
    }
} 
私有静态字符串移位最大值(字符串s){
断言s!=null;
如果(s.isEmpty()){返回s;}
字符ascii=s.charAt(0);
char asciiEnd=s.charAt(s.length()-1);
如果(ascii
我找到了以下解决方案: