题解 | #字符串排序#

字符串排序

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        int len = s.length();
        StringBuilder[] sb = new StringBuilder[26];
        for(int i=0;i<26;i++){    //初始化stringbuilder,为每个stringbuilder分配空间
            sb[i] = new StringBuilder();
        }
        HashMap<Integer,Character> map = new HashMap<>();
        for(int i=0;i<len;i++){
            if(s.charAt(i)>='a'&&s.charAt(i)<='z'){
                int num = s.charAt(i)-97;
                sb[num].append(s.charAt(i));
            }else if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){
                int num = s.charAt(i)-65;
                sb[num].append(s.charAt(i));
            }else{
                map.put(i,s.charAt(i));
            }
        }
        String myTry = "";
        for(int i=0;i<26;i++){
            myTry = myTry.concat(sb[i].toString());
        }
        for(int i=0,j=0;i<len;i++){
            if(map.containsKey(i)){
                System.out.print(map.get(i));
            }else{
                System.out.print(myTry.charAt(j));
                j++;
            }
        }
    }
}

整体思路就是创建一个stringbuilder类型的数组,为其分配26个空间,每个元素就代表一个字母。先遍历输入的所有字符,将所有的A或a添加到sb[0]中,这样就能保证这些字母的输入顺序。如输入字符串“abAa”,存储到sb数组中,此时的sb数组就是["aAa","b","","",.......]。其余字母同理。在创建一个map保存所有非字母的字符,key为位置,value为值。这样排完后,按照顺序输出即可。

全部评论

相关推荐

点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务