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

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

 

转载于:https://www.cnblogs.com/theWinter/p/10551602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值