import java.util.*;
/**
* @author xnl
* @Description:
* @date: 2022/7/3 0:13
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
String[] str = {"dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"};
System.out.println(Arrays.toString(solution.reorderLogFiles(str)));
}
/**
* 使用lambda表达式
* @param logs
* @return
*/
public String[] reorderLogFiles2(String[] logs) {
Arrays.sort(logs, new Comparator<String>() {
@Override
public int compare(String x, String y) {
String[] splitX = x.split(" ", 2);
String[] splitY = y.split(" ", 2);
// 判断是否是数字
boolean digitX = Character.isDigit(splitX[1].charAt(0));
boolean digitY = Character.isDigit(splitY[1].charAt(0));
// 如果两个都是数字的话
if (digitX && digitY){
return 0;
}
// 如果两个都是字符的话
if (!digitX && !digitY){
int c = splitX[1].compareTo(splitY[1]);
if (c != 0){
return c;
}
// 如果两个字符相等,比较两个字符的首字母大小
return splitX[0].compareTo(splitY[0]);
}
return digitX ? 1 : -1;
}
});
return logs;
}
/**
* 使用类的方式进行比较
* @param logs
* @return
*/
public String[] reorderLogFiles(String[] logs) {
int length = logs.length;
Pair[] pairs = new Pair[length];
for (int i = 0; i < length; i++){
pairs[i] = new Pair(logs[i], i);
}
Arrays.sort(pairs, (a ,b) -> compare(a , b));
String[] res = new String[length];
for (int i = 0; i < length; i++){
res[i] = pairs[i].log;
}
return res;
}
public int compare(Pair pair1, Pair pair2){
String log1 = pair1.log, log2 = pair2.log;
int index1 = pair1.index, index2 = pair2.index;
String[] split1 = log1.split(" ", 2);
String[] split2 = log2.split(" ", 2);
boolean x = Character.isDigit(split1[1].charAt(0));
boolean y = Character.isDigit(split2[1].charAt(0));
// 如果都是数字
if (x && y){
return index1 - index2;
}
// 如果都是字母
if (!x && !y){
int sc = split1[1].compareTo(split2[1]);
if (sc != 0){
return sc;
}
return split1[0].compareTo(split2[0]);
}
return x ? 1 : -1;
}
class Pair{
String log;
int index;
public Pair(String log, int index) {
this.log = log;
this.index = index;
}
}
}
力扣: 937. 重新排列日志文件
于 2022-07-03 01:35:26 首次发布