Problems: https://leetcode.com/problems/reorder-data-in-log-files/
思路:
把log分开考虑,从第二个string开始看是否是digit,分为digit和letter两个list
letterList重写sort方法,从第二个string开始按照字母顺序进行排序,需要注意的是如果字母顺序完全相同,则考虑index的字母排序
Solution:
class Solution {
public String[] reorderLogFiles(String[] logs) {
if(logs == null || logs.length == 0) {
return logs;
}
ArrayList<String> letList = new ArrayList<>();
ArrayList<String> digList = new ArrayList<>();
for(String log : logs) {
if(log.split(" ")[1].charAt(0) < 'a') {
digList.add(log);
} else {
letList.add(log);
}
}
Collections.sort(letList, (o1, o2) -> {
String s1[] = o1.split(" ");
String s2[] = o2.split(" ");
int len1 = s1.length;
int len2 = s2.length;
for(int i = 1; i < Math.min(len1, len2); i++) {
if(!s1[i].equals(s2[i])) {
return s1[i].compareTo(s2[i]);
}
}
return s1[0].compareTo(s2[0]);
});
for(int i = 0; i < logs.length; i++) {
if(i < letList.size()) {
logs[i] = letList.get(i);
} else {
logs[i] = digList.get(i-letList.size());
}
}
return logs;
}
}
TC:O(n)
SC: O(n)