JZX轻语:简

LeetCode 937 - 重新排列日志文件

发表于2024年05月27日

#字符串 #排序

简单的字符串处理题,首先按第一个空格分割每个日志,取出标识符和内容,然后检查内容是否全为数字或空格判断是否为数字日志:如果是,则按序加入到数字日志列表中,否则,加入(内容, 日志全文)到字母日志列表中(如果内容相同,进而比对日志全文,实际上就是在比对标识符了,没必要单独放标识符在元组里面)。最后,对字母日志列表进行排序,然后按序取出日志全文并追加数字日志组成即可。

官解的答案也非常简洁:自定义排序逻辑(直接编写排序函数里面的key逻辑即可),每个元素用于比较的信息为(0,内容,标识符)(如果是字母日志)或(1,)(如果是数字日志),由于是稳定排序,所以数字日志的顺序不会被打乱。

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
        letter_logs = []
        digit_logs = []
        for log in logs:
            identifier, content = log.split(' ', 1)
            is_digit = True
            for ch in content:
                if ch == ' ':
                    continue
                if not ch.isdigit():
                    is_digit = False
                    break
            if is_digit:
                digit_logs.append(log)
            else:
                letter_logs.append((content, log))  # 如果内容相同, 进而比对log, 实际上就是在比对标识符了
        letter_logs.sort()
        return [
            *(letter_log for _, letter_log in letter_logs),
            *digit_logs
        ]

闪念标签:LC

题目链接:https://leetcode.cn/problems/reorder-data-in-log-files/