算法打卡日志-2020.11.25| LeetCode1370
这道题是一个排序题,只想到暴力破解,查看题解之后,发现桶排序是一个不错的解决方式。
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);
}