这道题的关键是前两条规则,合并成一句话就是字母以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();
}
}
京公网安备 11010502036488号