力扣:937 重新排列日志文件

2019/03/18 13:17
阅读数 46

题目的分类是简单,但是很惭愧,搞了很久没搞出来。分析大神用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

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部