题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numOfStr = sc.nextInt();
sc.nextLine();//消耗掉nextInt的换行符
ArrayList<String> strs = new ArrayList<>();
for (int i = 0; i < numOfStr; i++) {
strs.add(sc.nextLine());
}
strs.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int numOfComp = Math.min(o1.length(), o2.length());//比较的次数
int len1 = o1.length();
int len2 = o2.length();
int flag =
-1;//0 1 -1无所谓 for里面一定会更改 -1 o1排在前面 大写较小 排前面 ab abc 这种情况 ab排前面
for (int i = 0; i < numOfComp; i++) {
char c1 = o1.charAt(i);
char c2 = o2.charAt(i);
if (c1 < c2) {
flag = -1;
break;//比较出来谁在前面了 就不能比较后面了 比较后面flag可能会改变
} else if (c1 > c2) {
flag = 1;
break;
} else {
flag = 0;
if (i == (numOfComp -
1)) {//比较到最后一位了 ab 排在 abc 前面 所以 len1<len2的时候设为-1
flag = len1 < len2 ? (-1) : 1;
}
continue;//目前位置 都是相等的 继续比较 emmmm现在看来 似乎没必要写着一句 不过为了这个注释 还是不删了
}
}
return flag;
}
});
for (String s : strs) {
System.out.println(s);
}
}
}
查看16道真题和解析