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!