按照指定顺序进行排序
解题思路:
1、将顺序表转换为hashMap,key = a-Z,value = 对应的顺序,这样就能最大限度的降低时间复杂度
2、之后通过遍历输入的字符串,自定义sort方法,通过比较map中对应的顺序,进行排序。
难点在于 将字符转化为ASCII值的思路、以及将规则转换为HashMap的想法。
其中
a对应 97 z对应122
A对应65 Z对应904
0对应 48 9对应57
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
List<Character> list = new LinkedList<>();
StringBuffer sb = new StringBuffer();
//a-z : 97-122 A-Z: 65 -90 0-9 : 48-57
int l = 97;
int r = 110;
int z = 48;
HashMap<Character,Integer> hashMap = new HashMap<>();
for (int i =1,j =26,o =27;i<=25&& j>=2 || o<=35;i+=2,j-=2,o++){
// 从a c e 单数对应的字母插入
// 且小写 此处是保存 a-m
hashMap.put((char)l++,i);
// a-33 =A A c、d也是如此,同理
// 此处是保存 A-M
hashMap.put((char)(l-33),i);
// n 对应 110,此处是保存小写n-z
// 此处是保存 n-z
hashMap.put((char)r++,
j);
// 对应N
// 此处保存 N-Z
hashMap.put((char)(r-33),j);
if(o <= 36){
hashMap.put((char)z++,o);
}
}
char[] chars = s.toCharArray();
for (char c :chars){
list.add(c);
}
list.sort(new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
if (hashMap.get(o1) > hashMap.get(o2)){
return 1;
}else if (hashMap.get(o1).equals(hashMap.get(o2))){
return Character.isUpperCase(o1)?1:-1;
}
return -1;
}
});
for (Character character:list){
sb.append(character);
}
System.out.println(sb.toString());
}