题解 | #字符串排序#

字符串排序

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String input = in.nextLine();

        // 保存需要排序的字母
        List<Character> sortedLetterList = new ArrayList<>();
        // 保存不需要排序的非字母(该字符的索引->该字符)
        Map<Integer, Character> nonSortedLetterMap = new HashMap<>();

        char[] inputs = input.toCharArray();
        for (int i = 0; i < inputs.length; i++) {
            char c = inputs[i];
            // 如果是字母
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                sortedLetterList.add(c);
            } else { // 如果不是字母
                nonSortedLetterMap.put(i, c);
            }
        }

        // 将字母排序
         sortedLetterList.sort((c1, c2) -> {
            // 计算排序指标(对应的大写字母的asc码值)
            int s1 = c1 < 'a' ? c1 : c1 - 'a' + 'A';
            int s2 = c2 < 'a' ? c2 : c2 - 'a' + 'A';
            // 当排序指标相等时,按照插入顺序输出
            return s1 - s2;
        });

        int x = 0;
        // 打印结果
        for (int i = 0; i < inputs.length; i++) {
            if (nonSortedLetterMap.containsKey(i)) { // 如果当前位置不是字母
                System.out.print(nonSortedLetterMap.get(i)); // 打印非字母字符
                x++;
            } else {
                System.out.print(sortedLetterList.get(i - x)); // 打印字母
            }
        }
        System.out.println();
    }
}

#哈希表#
全部评论

相关推荐

05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
自由水:这HR已经很好了,多的是已读不回和不读了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务