假设我们有一系列日志。在该数组中,每个条目都是一个由空格分隔的单词字符串。每个日志中的第一个单词是字母数字标识符。然后,有以下不同类型的字符串-
ID后的每个单词仅包含小写字母;
ID后的每个单词仅包含数字。
我们将这两种类型的日志分别称为字母日志和数字日志。ti保证每个日志在其id后至少有一个单词。
我们必须重新排序日志,以便所有字母日志都保留在任何数字日志之前。字母日志在字典上按顺序排序,忽略标识符,在平局的情况下使用标识符。最后,数字日志应按其原始顺序放置。因此,我们必须返回日志的最终顺序。
因此,如果输入像日志= [“ dig1 9 2 5 2”,“ let1 art can”,“ dig2 4 8”,“ let2 own kit dig”,“ let3 art zero”],那么输出将为[ “ let1 art can”,“ let3 art zero”,“ let2 own kit dig”,“ dig1 9 2 5 2”,“ dig2 4 8”]
为了解决这个问题,我们将遵循以下步骤-
单词:=一个新列表
nums:=一个新列表
对于每个登录日志,执行
通过用空格分隔来连接s的每个元素,并在最后插入word数组
在num的末尾插入日志
s:=日志单词列表
如果第二个单词是数字,则
除此以外,
words =然后按字典顺序对单词数组进行排序
words:=通过用空格分隔来连接word数组的每个元素,并创建一个字符串列表
合并两个列表中的单词和数字,然后返回
让我们看下面的实现以更好地理解-
class Solution: def reorderLogFiles(self, logs): words = [] nums = [] for log in logs: s = log.split() if s[1].isdigit(): nums.append(log) else: words.append((s[0], ' '.join(s[1:]))) words = sorted(words, key=lambda x: (x[1],x[0])) words = [' '.join(w) for w in words] return words + nums ob = Solution()print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]))
["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]
输出结果
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']