思路
- 按顺序收集字母,并放入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();
}
}

京公网安备 11010502036488号