简直是在折磨我~~~
这是我的第一次代码:
class Solution {
public String[] reorderLogFiles(String[] arr) {
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
String[] t = arr[i].split(" ");
char c = t[1].charAt(0);
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
list1.add(arr[i]);
} else {
list2.add(arr[i]);
}
}
String[] arrt = new String[list1.size()];
for (int i = 0; i < list1.size(); i++) {
arrt[i] = list1.get(i);
}
list1.clear();
for (int i = 0; i < arrt.length; i++) {
int max = i;
for (int j = i + 1; j < arrt.length; j++) {
if (f(arrt[max]).compareTo(f(arrt[j])) >= 0) {
max = j;
}
if (max != i) {
String t = arrt[max];
arrt[max] = arrt[i];
arrt[i] = t;
}
}
}
for (int i = 0; i < arrt.length; i++) {
list1.add(arrt[i]);
}
list1.addAll(list2);
for (int i = 0; i < list1.size(); i++) {
arr[i] = list1.get(i);
}
// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
// }
return arr;
}
private String f(String s) {
String[] arrt = s.split(" ");
String str = "";
for (int i = 1; i < arrt.length; i++) {
str += arrt[i];
}
return str;
}
}
大致思路就是:分别找出英文的文件、数字文件、然后对英文文件排序,最后加上数字文件;
结果还是我太年轻了,想得太短浅了它的条件有:
1、去掉头名,按照字母排序
2、如果英文文件完全相同,按照头名排序,
最后我还是屈服了,看了别人的题解
我们先介绍一下:Arrays.sort()排序;
它有两种方法:
1、直接升序排序:Arrays.sort(arr);
2、自定义排序:Arrays.sort(arr,a,b->
return 1;//返回大于0就代表a比b大,0就是相同,小于0就是a比b小
);
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class likou937 {
public static void main(String[] args) {
String[] arr = { "j mo", "5 m w", "g 07", "o 2 0", "t q h" };
Arrays.sort(arr, (a, b) -> {
String s1[] = a.split(" ", 2);//分割成两个部分:头名、内容
String s2[] = b.split(" ", 2);
boolean a1 = Character.isDigit(s1[1].charAt(0));//判断是否为数字
boolean b1 = Character.isDigit(s2[1].charAt(0));
if (!a1 && !b1) {//都是英文的情况
if (!s1[1].equals(s2[1])) {//内容进行排序
return s1[1].compareTo(s2[1]);
} else {//内容相同,按照头名进行排序
return s1[0].compareTo(s2[0]);
}
} else if (a1 && b1) {//都是数字
return 0;
} else if (!a1) {//a是字母,就要排在前面
return -1;
} else {//否则在后面
return 1;
}
});
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}