题解 | #字符串排序#
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(); } }