思路
- 首先遍历每一个数组,然后判断数组中空格分隔的第二个元素是否是数字;如果是数字则加入数字集合;如果是单词,则加入单词集合
- 然后使用集合的排序,自定义比较器;根据题意,如果标识符后面的元素都相同,则使用标识符的字典序比较两字符串;否则后面元素不同,直接根据后面的元素的字典序比较即可
代码实现(java)
class Solution {
public String[] reorderLogFiles(String[] logs) {
List<String> wordList = new ArrayList<>();
List<String> numList = new ArrayList<>();
for(int i = 0; i < logs.length; i++) {
char c = logs[i].split(" ")[1].charAt(0);
if(c >= '0' && c <= '9') {
numList.add(logs[i]);
} else {
wordList.add(logs[i]);
}
}
Collections.sort(wordList, (String s1, String s2) -> {
String lastStrA = s1.substring(s1.indexOf(' '));
String lastStrB = s2.substring(s2.indexOf(' '));
String headA = s1.substring(0, s1.indexOf(' '));
String headB = s2.substring(0, s2.indexOf(' '));
if(lastStrA.equals(lastStrB)) {
return headA.compareTo(headB);
} else {
return lastStrA.compareTo(lastStrB);
}
});
wordList.addAll(numList);
return wordList.toArray(new String[0]);
}
}