递归:将具有最大ASCII值的char转换为第一个索引,进一步移动剩余的charsequence;

时间:2018-05-29 08:48:59

标签: string recursion

输出应该是例如shiftMaxChar(" acbxdyfjzdmk")---> (" zacbxdyfjdmk&#34)

目前我只是在检查' 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("\"\""));

2 个答案:

答案 0 :(得分:1)

我们可以通过假设前一个调用已经为字符串的其余部分完成此操作来实现此目的。

JavaScript代码:

&#13;
&#13;
function f(s){
  if (s.length < 2)
    return s;

  let rest = f(s.substr(1));
  
  if (s[0] < rest[0])
    return rest[0] + s[0] + rest.substr(1);
    
  return s;
}

console.log(f("acbxdyfjzdmk"));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我来了解决方案:

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;
    }
}