题解 | #字符串排序#

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

思路

  1. 按顺序收集字母,并放入26个“桶”中;
  2. 从前向后遍历 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();
    }
}
全部评论

相关推荐

26牛牛不会梦到感谢信:羡慕离职了还能吃吗现在就赶回去
点赞 评论 收藏
分享
没有offer的呆呆:日常和暑期都投试一试,3月份机会挺多的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务