问题描述:
样例如下:
代码如下:
import java.util.*;
public class ReorderLogFiles {
public boolean isWordOrNumber(String a){//判断是字母日志还是数字日志
String[] temp=a.split(" ");//true表示为数字日志 false表示为字母日志
if (temp[1].charAt(0)>='0'&&temp[1].charAt(0)<='9')
return true;
else return false;
}
public String[] reorderLogFiles(String[] logs) {
List<String> word=new LinkedList<>();//记录字母字符串
List<String> number=new LinkedList<>();//记录数字字符串
for (int i = 0; i <logs.length ; i++) {
if (isWordOrNumber(logs[i])) number.add(logs[i]);
else word.add(logs[i]);
}
Collections.sort(word, new Comparator<String>() {
public int compare2(String a,String b){//两个字符串比较 若a>b 返回1 否则返回小于-1 相等为0
int len=Math.min(a.length(),b.length());//取二者的最小值
for (int i = 0; i <len ; i++) {
if (a.charAt(i)>b.charAt(i)){
return 1;
}else if(a.charAt(i)==b.charAt(i)) continue;
else return -1;
}
if (a.length()>len&&b.length()==len) return 1;
else if (a.length()==len&&b.length()>len) return -1;
return 0;//表示二者是相等情况
}
@Override
public int compare(String o1, String o2) {//重写compare函数
String[] o11=o1.split(" ");
String[] o22=o2.split(" ");
int len=Math.min(o11.length,o22.length);
for (int i = 1; i <len ; i++) {
if (o11[i].equals(o22[i])) continue;
else {
if (compare2(o11[i],o22[i])==1) return 1;
else return -1;
}
}
if (o11.length>len&&o22.length==len) return 1;
else if (o11.length==len&&o22.length>len) return -1;
else {//二者内容相同时 按照标识符排序
if (compare2(o11[0],o22[0])==1) return 1;
else if (compare2(o11[0],o22[0])==-1) return -1;
else return 0;
}
}
});
String[] res=new String[logs.length];//将集合中的元素与加入到结果中
for (int i = 0; i <word.size() ; i++) {
res[i]=word.get(i);
}
for (int i = 0; i <number.size() ; i++) {
res[word.size()+i]=number.get(i);
}
return res;
}
}
结果如下: