大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。
题目大意
要求我们按照特定的格式重新排序日志。
日志 的格式是第一个单词是 日志 的 标识符,后面的都是 日志 的内容。
有两种 日志,一种内容是纯数字的(数字日志),一种内容是纯英文字符的(字母日志)。
要求的排序规则:
- 把所有的英文 日志 放到数字 日志 前面。
- 而且如果是字母日志,需要按照内容对 日志 进行排序,当内容相同的时候按照标识符排序;
- 如果是数字 日志,保持原来的顺序。
解题方法
分割和排序
看起来题目很长,但是只要是字符串处理题,对于 python 都很简单。
我用了两个列表,分别存储字母日志和数字日志,先分别排序,再拼接到一起。
- 首先需要进行分割成标识符和内容;
- 对内容的第一个单词进行判断:
- 如果是英文字符串,说明是字母日志,那么把内容和标识符构成 元组 放到
letters
的列表里; - 如果是数字字符串,说明是数字日志,那么直接把当前的这个日志放到
nums
列表里。
- 如果是英文字符串,说明是字母日志,那么把内容和标识符构成 元组 放到
- 然后我们需要对
letters
进行排序:因为 元组 里首先是内容,然后是标识符,所以sort()
会先对内容进行排序,然后再对标识符进行排序。 - 从
letters
排序的结果中提取出所有的内容,并与 nums 拼接在一起,返回即可。
class Solution(object):
def reorderLogFiles(self, logs):
"""
:type logs: List[str]
:rtype: List[str]
"""
letters = []
nums = []
for log in logs:
logsplit = log.split(" ")
if logsplit[1].isalpha():
letters.append((" ".join(logsplit[1:]), logsplit[0]))
else:
nums.append(log)
letters.sort()
return [letter[1] + " " + letter[0] for letter in letters] + nums
- 对于 Easy 的题目,根本不用多想,怎么方便怎么来,基本都能过。
我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。
- 在刷题的时候,如果你不知道该怎么刷题,可以看 LeetCode 应该怎么刷?
- 如果你觉得题目太多,想在短时间内快速提高,可以看 LeetCode 最经典的 100 道题。
- 送你一份刷题的代码模板:【LeetCode】代码模板,刷题必会
- 我写的 1000 道 LeetCode 题解,都在这里了,免费拿走。