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

