题目的分类是简单,但是很惭愧,搞了很久没搞出来。分析大神用Java做的:
class Solution{
public String[] reorderLogFiles(String[] logs) {
List<String> list = new ArrayList(Arrays.asList(logs));
Queue<String> queue = new LinkedList<>();
for(int i = 0; i < list.size();)
if(isNumberLog(list.get(i))){
queue.add(list.get(i));
list.remove(i);
}else i ++;
//将list按字典排序 a.indexOf返回第一个空格出现的后一个下标
//substring(k) 返回从k位置到末尾的字符串
list.sort((a, b) -> a.substring(a.indexOf(" ") + 1).
compareTo(b.substring(b.indexOf(" ") + 1)));
while(!queue.isEmpty())
list.add(queue.remove());
return list.toArray(new String[list.size()]);
}
public boolean isNumberLog(String log){
String ss = log.split("\\ ")[1]; //表示使用空格进行分割,然后取分割后的第[1]个位置,从0开始
for(int i = 0; i < ss.length(); i ++)
if(!Character.isDigit(ss.charAt(i)))
return false;
return true;
}
}
其中巧妙的用到了正则表达式分割,list.sort的排序,substring等。首先把所有字符串输入列表 list
里面,然后将数字log提取到 queue
, 对列表的元素进行排序后再把队列的插入列表,最后返回 list.toArray(new String[list.size()])
关于sort那一段,参考Java8新特性,lambda表达式。https://www.cnblogs.com/franson-2016/p/5593080.html