题解 | #字符串排序#

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

相关推荐

看新闻上说,印度媒体都在密集发申请攻略,咨询量直接涨了30%印度、韩国、新加坡的申请意愿特别突出,感觉要成科技人才的新选择了~我的offer还没有呢!
ysb:哥们就不明白了,自己的人才都留不住,然后找外国,咋滴给外国人才高福利朝九晚五不加班是吗,然后我们大学生996,加班,无offer,摆地摊,送外卖是吗,有点意思,很英明
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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