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
代码:
- class Solution {
- public String[] reorderLogFiles(String[] logs) {
- Comparator<String> myComp = new Comparator<String>() {
- @Override
- public int compare(String s1, String s2) {
- String[] split1 = s1.split(" ", 2);
- String[] split2 = s2.split(" ", 2);
- boolean isDigit1 = Character.isDigit(split1[1].charAt(0));
- boolean isDigit2 = Character.isDigit(split2[1].charAt(0));
- if(!isDigit1 && !isDigit2) {
- int comp = split1[1].compareTo(split2[1]);
- if(comp != 0)
- return comp;
- return split1[0].compareTo(split2[0]);
- }
- return isDigit1 ? (isDigit2 ? 0 : 1) : -1;
- }
- };
- Arrays.sort(logs, myComp);
- return logs;
- }
- }
[Leetcode]937. Reorder Log Files 给日志文件排序
来源: http://www.bubuko.com/infodetail-3092584.html