937.重新排列日志文件

重新排列日志文件

给你一个日志数组 logs。每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 。

有两种不同类型的日志:

  • 字母日志:除标识符之外,所有字均由小写字母组成
  • 数字日志:所有字均由数字组成

请按字母日志在前、数字日志在后的规则对日志进行排序。字母日志按内容字母序排序,相同的按标识符排序。数字日志相对顺序不变。

示例 1:

输入:logs = [“dig1 8 1 5 1”,”let1 art can”,”dig2 3 6”,”let2 own kit dig”,”let3 art zero”]
输出:[“let1 art can”,”let3 art zero”,”let2 own kit dig”,”dig1 8 1 5 1”,”dig2 3 6”]

提示:

  • logs.length <= 100
  • logs[i] 中标识符后面至少有一个词
  • logs[i] 开头是字母

解析

分离字母日志和数字日志,对字母日志按规则排序,数字日志保持原顺序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var reorderLogFiles = function (logs) {
const letterLogs = [];
const digitLogs = [];

for (const log of logs) {
const idx = log.indexOf(" ");
const identifier = log.substring(0, idx);
const content = log.substring(idx + 1);

if (content[0] >= "0" && content[0] <= "9") {
digitLogs.push(log);
} else {
letterLogs.push({ identifier, content, original: log });
}
}

letterLogs.sort((a, b) => {
if (a.content !== b.content) return a.content.localeCompare(b.content);
return a.identifier.localeCompare(b.identifier);
});

return [...letterLogs.map((l) => l.original), ...digitLogs];
};

时间复杂度 O(n log n),空间复杂度 O(n)。


937.重新排列日志文件
https://leetcode.lz5z.com/937.reorder-data-in-log-files/
作者
tickli
发布于
2025年2月11日
许可协议