题解 | #简单密码#

字符串排序

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

这道题的关键是前两条规则,合并成一句话就是字母以ASCII码从小到大排序,并且不区分大小写,同时要求按照输入顺序排列(即排序是稳定的!)解决方案有两种

  • 遍历字符串,StringBuilder拼接字符串中字母,转为charArray做稳定排序(如冒泡,判断条件改为同时转为大写或小写判断大写),最后遍历拼接最终字符串。
  • 遍历字符串,将字母放入list集合,利用Collections.sort方法+自定义比较器完成排序,最后遍历拼接最终字符串。
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            String res = sortStr(str);
            System.out.println(res);
        }
    }

    private static String sortStr(String str){
        //将所有字母加入集合
        List<Character> list = new ArrayList<>();
        for(int i=0; i<str.length(); i++){
            char c = str.charAt(i);
            if((c>='a'&&c<='z') || (c>='A'&&c<='Z')){
                list.add(c);
            }
        }
        //按照规则排序,也可以自己写一个稳定的排序算法!
        Collections.sort(list, new Comparator<Character>(){
            public int compare(Character a, Character b){
                return Character.toLowerCase(a)-Character.toLowerCase(b);
            }
        });
        //拼接结果
        StringBuilder sb = new StringBuilder();
        int index=0;
        for(int i=0; i<str.length(); i++){
            char c = str.charAt(i);
            if((c>='a'&&c<='z') || (c>='A'&&c<='Z')){
                sb.append(list.get(index));
                index++;
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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