鉴于方法:
public String moveSmallest(String s) {}
如何找到具有最小ASCII值的char,将其放在String的末尾,并返回该String,递归?
阅读Find a char..,Move the char..,Move to end..没有真正回答:我需要的算法是什么,以及如何实现它。
不能使用全局变量,累加器,辅助方法或任何其他结构。
这个问题(在本质上)与How to pass a partial solution to the next recursive call密切相关。
尝试找到min char:
if (s.length() == 0) {
return s;
} else if (s.length() > 1) {
char c = s.charAt(0) > moveSmallest(s.substring(1)).charAt(s.length()-1) ? s.charAt(0) : moveSmallest(s.substring(1)).charAt(s.length()-1);
}
答案 0 :(得分:1)
好吧,如果你真的想使用递归,那么它就是。
将最小的字母移到最后:
public static String moveSmallestToTheEnd(String s) {
if (s.length() <= 1)
return s;
if (s.length() == 2)
return s.charAt(0) < s.charAt(1) ? String.valueOf(s.charAt(1)) + s.charAt(0) : s;
String suffix = s.substring(1);
String res = moveSmallestToTheEnd(suffix);
return s.charAt(0) < res.charAt(res.length() - 1) ? suffix + s.charAt(0) : s.charAt(0) + res;
}
输出:
a -> a
ab -> ba
ba -> ba
abc -> bca
bac -> bca
bca -> bca
bcdae -> bcdea
bcae -> bcea
将最高的字母移到开头:
public static String moveHighestToTheBeginning(String s) {
if (s.length() <= 1)
return s;
if (s.length() == 2)
return s.charAt(0) < s.charAt(1) ? String.valueOf(s.charAt(1)) + s.charAt(0) : s;
String prefix = s.substring(0, s.length() - 1);
String res = moveHighestToTheBeginning(prefix);
return s.charAt(s.length() - 1) > res.charAt(0) ? s.charAt(s.length() - 1) + prefix : res + s.charAt(s.length() - 1);
}
输出:
a -> a
ab -> ba
ba -> ba
abc -> cab
bac -> cba
bca -> cba
bcdae -> ebcda
bcae -> ebca