Java 如何将ASCII值最小的字符递归地放在字符串的末尾?
给定方法:Java 如何将ASCII值最小的字符递归地放在字符串的末尾?,java,string,recursion,Java,String,Recursion,给定方法: public String moveSmallest(String s) {} 如何找到ASCII值最小的字符,将其放在字符串末尾,然后递归返回该字符串 阅读时,我并没有真正回答:我需要什么样的算法,以及如何实现它 不能使用全局变量、累加器、辅助方法或任何其他结构 这个问题(本质上)与我们的关系密切 尝试查找最小字符: if (s.length() == 0) { return s; } else if (s.length() > 1) {
public String moveSmallest(String s) {}
如何找到ASCII值最小的字符,将其放在字符串末尾,然后递归返回该字符串
阅读时,我并没有真正回答:我需要什么样的算法,以及如何实现它
不能使用全局变量、累加器、辅助方法或任何其他结构
这个问题(本质上)与我们的关系密切
尝试查找最小字符:
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);
}
如果你真的想使用递归,这里就是了 将最小的字母移到末尾:
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;
}
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);
}
将最高位的字母移到开头:
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;
}
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);
}
你试过什么吗?@Dallmayer Das是sehr einfach!