题解 | #字符串排序#
字符串排序
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为值。这样排完后,按照顺序输出即可。