题解 | #简单密码#

字符串排序

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

相关推荐

11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务