资讯专栏INFORMATION COLUMN

937-重新排列日志文件

cgspine / 1473人阅读

摘要:前言的第一题重新排列日志文件你有一个日志数组。将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按字母顺序排序,忽略标识符,标识符仅用于表示关系。

前言

Weekly Contest 110的第一题 重新排列日志文件:

你有一个日志数组 logs。每条日志都是以空格分隔的字串。

对于每条日志,其第一个字为字母数字标识符。然后,要么:

标识符后面的每个字将仅由小写字母组成,或;

标识符后面的每个字将仅由数字组成。

我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。

将日志重新排序,使得所有字母日志都排在数字日志之前。字母日志按字母顺序排序,忽略标识符,标识符仅用于表示关系。数字日志应该按原来的顺序排列。

返回日志的最终顺序

示例:

输入:["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
输出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]

提示:

0 <= logs.length <= 100

3 <= logs[i].length <= 100

logs[i] 保证有一个标识符,并且标识符后面有一个字。

解题思路

本题主要麻烦的地方是题目的描述有点难懂,其实是一道很简单的题目。
首先分析题目中对于日志字母日志数字日志的定义:

日志:指的是日志文件(本题中为字符串数组)中的一行记录,记录的内容为用空格分隔的字符串(后续称为单词),需要注意第一个单词是标识符用于排序。即 标识符 单词1 [单词2 ...]

字母日志:指的是日志内容除了标识符部分外的单词都由字母组成

数字日志:指的是日志内容除了标识符部分外的单词都由数字组成

然后分析题目意思,得出字符串数组的处理思路:

对日志进行分组,分为字母日志数字日志

字母日志重排序

字母日志数字日志聚合日志数据

实现代码
    /**
     * 937. 重新排列日志文件
     * @param logs
     * @return
     */
    public String[] reorderLogFiles(String[] logs) {
        List letterLogs=new LinkedList<>();
        List digitLogs=new LinkedList<>();
        //日志分组
        for(String log:logs){
            char c=log.charAt(log.indexOf(" ")+1);
            if(c>=48 && c<=57){//是否包含数字
                digitLogs.add(log);
            }else{
                letterLogs.add(log);
            }
        }
        //字母日志排序
        letterLogs.sort(new Comparator() {

            @Override
            public int compare(String o1, String o2) {//只比较日志内容
                String log1=o1.substring(o1.indexOf(" "));
                String log2=o2.substring(o2.indexOf(" "));
                return log1.compareTo(log2);
            }
        });
        //聚合日志
        letterLogs.addAll(digitLogs);
        return letterLogs.toArray(logs);
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72119.html

相关文章

  • Leetcode PHP题解--D54 937. Reorder Log Files

    摘要:题目链接题目分析给定一个数组,每一个元素是一条日志。剩余部分为全为小写字母的字符串称为字符日志或全为数字的字符串称为数字日志。给定的数组中确定会至少有一个字母。遍历完成后,对字符日志进行排序。在其后拼接数字日志数组,并返回即可。 D54 937. Reorder Log Files 题目链接 937. Reorder Log Files 题目分析 给定一个数组,每一个元素是一条日志。 ...

    hot_pot_Leo 评论0 收藏0
  • [LeetCode] 937. Reorder Log Files

    Problem 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...

    nemo 评论0 收藏0
  • Fluented,Kubernetes和谷歌云平台——处理日志流的解决方案

    摘要:最后,我们用和适当的独特后缀来标注数据流。将数据流分离到两个不同的目的地在这里,我们解析自动定量日志,管理我们的缓冲区,查询和区块大小。 也许你对Fluentd的统一日志记录层已经有所耳闻。可能你对日志是流不是文件这个概念也已经很熟悉,所以现在就让我们用这个方法来思考日志层。事实上,最后导致决定性的一点就是fluentd是如何被配置的。全部都是关于我们如何处理stream的不同元素的:...

    ymyang 评论0 收藏0

发表评论

0条评论

cgspine

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<