题解 | #字符串排序#
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
思路
- 按顺序收集字母,并放入26个“桶”中;
- 从前向后遍历
s- 若当前字符
c不是字母,则保留该位置字符; - 若当前字符
c是字母,则从“桶”中取出元素,并置于当前位置
- 若当前字符
import java.util.*;
public class Main {
public static void main(String[] arags) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
StringBuilder[] letters = new StringBuilder[26];
// 初始化
for (int i = 0; i < 26; i++) {
letters[i] = new StringBuilder();
}
// 按顺序收集字母,并放入26个“桶”中
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isLetter(c)) {
int index = Character.isUpperCase(c) ? c - 'A' : c - 'a';
letters[index].append(c);
}
}
// 遍历
int letterIndex = 0;
int index = 0;
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isLetter(c)) {
while (index >= letters[letterIndex].length()) {
letterIndex++;
index = 0;
}
res.append(letters[letterIndex].charAt(index++));
} else {
res.append(c);
}
}
System.out.println(res);
in.close();
}
}

华为HUAWEI工作强度 1363人发布
查看13道真题和解析