题解 | #简单密码#
字符串排序
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(); } }