Skip to content

Latest commit

 

History

History
87 lines (61 loc) · 2.84 KB

937-reorder-data-in-log-files.md

File metadata and controls

87 lines (61 loc) · 2.84 KB

937. Reorder Data in Log Files - 重新排列日志文件

你有一个日志数组 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"]

 

提示:

  1. 0 <= logs.length <= 100
  2. 3 <= logs[i].length <= 100
  3. logs[i] 保证有一个标识符,并且标识符后面有一个字。

题目标签:String

题目链接:LeetCode / LeetCode中国

题解

Language Runtime Memory
python3 44 ms 13.4 MB
class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        return sorted(list(filter(lambda l : l[l.index(' ') + 1].isalpha(), logs)), key=lambda x : x[x.index(' '):]) + list(filter(lambda l : l[l.index(' ') + 1].isdigit(), logs))
Language Runtime Memory
java 2 ms 39.8 MB
class Solution {
    public String[] reorderLogFiles(String[] logs) {
        List<String> strs = new ArrayList<>();
        List<String> nums = new ArrayList<>();
        for (String log : logs) {
            if (Character.isLetter(log.charAt(log.indexOf(' ') + 1))) {
                strs.add(log);
            } else {
                nums.add(log);
            }
        }
        strs.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.substring(o1.indexOf(' ')).compareTo(o2.substring(o2.indexOf(' ')));
            }
        });
        strs.addAll(nums);
        return strs.toArray(new String[0]);
    }
}