题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.ArrayList;
import java.util.Set;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String input = in.nextLine();
// LinkedHashMap用来存放非英文字母和它的初始位置
LinkedHashMap<Integer, Character> map = new LinkedHashMap<Integer, Character>();
// ArrayList用来存放英文字母,使用类冒泡排序进行排序(认为字母大小写相等)
ArrayList<Character> list = new ArrayList<Character>();
for (int i = 0; i < input.length(); i++) {
char tempCh = input.charAt(i);
if ((tempCh >= 'A' && tempCh <= 'Z') || (tempCh >= 'a' && tempCh <= 'z')) {
list.add(Character.valueOf(tempCh));
} else {
map.put(Integer.valueOf(i), Character.valueOf(tempCh));
}
}
// System.out.println(list);
//冒泡排序
int length = list.size();
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
Character tempC = null;
if (compare(list.get(j), list.get(j + 1)) > 0) {
tempC = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, tempC);
}
}
}
// System.out.println(list);
// System.out.println(map);
Set<Integer> TS = map.keySet();
for (Integer i : TS) {
int n = i.intValue();
list.add(n, map.get(i));
}
// System.out.println(list);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
}
}
// 比较两个字母大小,c1>c2,返回正数,c1=c2,返回0,c1<c2,返回负数
//规定 A=a A<b B>a a<C
public static int compare(Character c1, Character c2) {
int result;
char ch1 = c1.charValue();
char ch2 = c2.charValue();
//将小写字符转换为大写字符
if (ch1 >= 'a' && ch1 <= 'z') {
ch1 = (char)(ch1 - 32);
}
if (ch2 >= 'a' && ch2 <= 'z') {
ch2 = (char)(ch2 - 32);
}
return ch1 - ch2;
}
}
