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
]