算法打卡日志-2020.11.25| LeetCode1370

题目 1370. 上升下降字符串

这道题是一个排序题,只想到暴力破解,查看题解之后,发现桶排序是一个不错的解决方式。

public String sortString(String s) {
    int len = s.length();
    char[] chars = s.toCharArray();
    //将字符排序,方便后续取数据
    Arrays.sort(chars);
    StringBuilder stringBuilder=new StringBuilder(new String(chars));
    StringBuilder sResult = new StringBuilder();
    //步骤7循环 
    for (int i = 0; i < len;) {
        //步骤1
        chars[i]=stringBuilder.charAt(0);
        stringBuilder.deleteCharAt(0);
        i++;
        //步骤2,3
        for (int j = 0; j < stringBuilder.length();j++) {
            char ch=stringBuilder.charAt(j);
            if (ch>chars[i-1]){
                chars[i]=ch;
                i++;
                stringBuilder.deleteCharAt(j);
                j--;
            }
        }
        //i在上下两个循环中都可以保证不会溢出,唯独在这可能会因为步骤1而遗漏
        if (i==len){
            break;
        }
        //步骤4
        chars[i]=stringBuilder.charAt(stringBuilder.length()-1);
        stringBuilder.deleteCharAt(stringBuilder.length()-1);
        i++;
        //步骤5,6
        for (int j = 0; j >=0 ; j++) {
            int length=stringBuilder.length();
            if (j==length){
                break;
            }
            char ch=stringBuilder.charAt(length-1-j);
            if (ch<chars[i-1]){
                chars[i]=ch;
                i++;
                stringBuilder.deleteCharAt(length-1-j);
                j--;
            }
        }
    }
    return new String(chars);
}
posted @ 2020-11-25 21:22  PPPPu  阅读(43)  评论(0)    收藏  举报