题解 | #字符串排序#

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();
    }
}
全部评论

相关推荐

06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
zhiyog:哈哈哈哈哈哈哈哈哈哈哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务