アルゴリズム#アルゴリズム#[String] Reorder Data in Log Files


LeetCode 937問題


質問リンク:
https://leetcode.com/problems/reorder-data-in-log-files/
問題は以下の通りです.
ログを並べ替えます.
1.ログの一番前の文字列は識別子です.
2.文字からなるログは、デジタル・ログより先に作成されます.
3.識別子は順序に影響を与えず、文字が同じ場合にのみ識別子順にソートされます.
4.数字は入力順です.
問題は簡単だ.文字からなるログは、常に数値からなるログの前にあり、数値ログは入力の順序で存在します.
ログの形式は次のとおりです.
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"]
文字からなるログは前面にあり、識別子「let~」の後ろの文字列を基準に並べ替えられます.その後は、以前に入力として存在し、数値からなるログの入力順に存在する数値からなるログです.
答えのコードは次のとおりです.

に答える

class Solution:
    def reorderLogFiles(self, logs: List[str]) -> List[str]:
    letters, digits = [], []
    for log in logs:
        if log.split()[1].isdigit():
            digits.append(log)
        else:
            letters.append(log)

    # 2개의 키를 람다표현식으로 정렬
    # 1차적으로 식별자를 제외한 로그를 기준으로 sort를 하게되고,
    # 동일한 순위의 경우 후순위 기준인 식별자를 기준으로 sort하게된다.
    letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
    return letters + digits
文字列の場合、isdigit()関数を使用して、文字列が数値からなる文字列であるかどうかを判断します.数値からなる文字列の場合は、ログを数値リストに追加し、文字からなる文字列の場合はアルファベットリストに追加します.
文字列からなるログと数字からなるログをそれぞれアルファベットと数字のリストに整理し、アルファベット順にリストをソートします.
sort関数を使用する場合、鍵はランダによって定義されます.1番目のパラメータであるx.split()[1]は、識別子以外の文字列に基づいており、2番目のパラメータであるx.split()[0]は、識別子以外の文字列をキーワードとして並べ替えた場合に、同一の線上の文字列に識別子をキーワードとして適用するという意味である.
最後に、アルファベットと数値リスト「+」を接続して戻り、コードを終了します.