You have an array of logs
. Each log is a space delimited string of words.
For each log, the first word in each log is an alphanumeric identifier. Then, either:
- Each word after the identifier will consist only of lowercase letters, or;
- Each word after the identifier will consist only of digits.
We will call these two varieties of logs letter-logs and digit-logs. It is guaranteed that each log has at least one word after its identifier.
Reorder the logs so that all of the letter-logs come before any digit-log. The letter-logs are ordered lexicographically ignoring identifier, with the identifier used in case of ties. The digit-logs should be put in their original order.
Return the final order of the logs.
Example 1:
Input: ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
Note:
0 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i]
is guaranteed to have an identifier, and a word after the identifier.
题意:
给定日志文件(规定首单词是认证号), 要求以字母日志在前,数字日志在后的顺序排序
思路:
重写一个Comparator
代码:
1 class Solution { 2 public String[] reorderLogFiles(String[] logs) { 3 Comparator<String> myComp = new Comparator<String>() { 4 @Override 5 public int compare(String s1, String s2) { 6 String[] split1 = s1.split(" ", 2); 7 String[] split2 = s2.split(" ", 2); 8 boolean isDigit1 = Character.isDigit(split1[1].charAt(0)); 9 boolean isDigit2 = Character.isDigit(split2[1].charAt(0)); 10 if(!isDigit1 && !isDigit2) { 11 int comp = split1[1].compareTo(split2[1]); 12 if(comp != 0) 13 return comp; 14 return split1[0].compareTo(split2[0]); 15 } 16 return isDigit1 ? (isDigit2 ? 0 : 1) : -1; 17 } 18 }; 19 Arrays.sort(logs, myComp); 20 return logs; 21 } 22 }