题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584?tpId=37&rp=1&ru=%2Fexam%2Fcompany&qru=%2Fexam%2Fcompany&sourceUrl=%2Fexam%2Fcompany&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        //Mapping:字符->出现index
        ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (Character.isLetter(c)) {
                list.add(new AbstractMap.SimpleEntry<>(c, i));  //加入元素
            }
        }
        list.sort((o1, o2)-> { //排序
            char c1 = o1.getKey(), c2 = o2.getKey();
            if (c1 <= 'z' && c1 >= 'a') c1 = (char)(c1 - 32);
            if (c2 <= 'z' && c2 >= 'a') c2 = (char)(c2 - 32);
            return c1 == c2 ? o1.getValue() - o2.getValue() : c1 - c2; //如果两者大写都相等,就按照先后顺序,如果不是同一个字母就按照字母表顺序
        });
        char[] charArray = s.toCharArray();   //把字符替换进去
        for (int i = 0; i < charArray.length; i++) {
            if (Character.isLetter(charArray[i])) {
                charArray[i] = list.get(0).getKey();
                list.remove(0);
            }
        }
        System.out.println(String.valueOf(charArray));
    }
}

使用List+Map.Entry

全部评论

相关推荐

11-19 18:44
已编辑
成都理工大学 Java
程序员花海:我面试过100+校招生,大厂后端面试不看ACM,竞赛经历含金量低于你有几份大厂实习 这个简历整体来看不错 可以海投
如何写一份好简历
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
11-29 00:55
门头沟学院
区域赛银,邀请赛金,打算十二月打下Java基础、背点八股、写个外卖后去投福建小厂的寒假实习,简历应该怎么写呢?以及福州/和厦门有推荐的小厂吗?
牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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