[LeetCode] 937. Reorder Data in Log Files - Python


Algorithm Problem with Python — 27day

問題の説明📖


You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier.
There are two types of logs:
  • Letter-logs: All words (except the identifier) consist of lowercase English letters.
  • Digit-logs: All words (except the identifier) consist of digits.
    Reorder these logs so that:
  • The letter-logs come before all digit-logs.
    The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.
    The digit-logs maintain their relative ordering.
    Return the final order of the logs.
    せいげんじょうけん
  • 1 <= logs.length <= 100
  • 3 <= logs[i].length <= 100
  • All the tokens of logs[i] are separated by a single space.
  • logs[i] is guaranteed to have an identifier and at least one word after the identifier.
  • I/O例
    Example 1:
    Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
    Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
    Explanation:
    The letter-log contents are all different, so their ordering is "art can", "art zero", "own kit dig".
    The digit-logs have a relative order of "dig1 8 1 5 1", "dig2 3 6".
    Example 2:
    Input: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
    Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]

    問題を理解する🔑


    指定した条件に基づいてログ・ファイルの問題を並べ替えます.
    通常、文字列は要素のリストに再配置されます.
    ここで注意すべき点は、リスト内の要素文字列の一番前に識別子があり、順序に影響を与えないことです.
    識別子以外の前の文字が同じ場合は、識別子でソートします.
    もしそうであれば、ソート条件は識別子の後ろに続く文字であり、識別子は後に続く.
    また、数値要素は入力順に並べ替えられ、並べ替える必要はありません.
    整理すると、リスト内の要素がソートされ、文字要素が前に並べられ、文字要素間でも後続の最初の文字に基づいて識別子が比較されます.
    文字が同じ場合は、識別子を使用してソートします.
    すべての文字要素が整列している場合、数値要素は順番に後続します.

    首都コード▼▼


  • 指定した入出力で、文字ログとデジタルログを区別するリストを作成します.

  • 入力ログfor in文を適用し、各要素を1で作成したリストにそれぞれ挿入して、文字ログかデジタルログかを区別します.

  • 文字ログのみsort関数を使用してソートします.
    このとき、比較条件としてキーパラメータを作成します.
    keyを返す関数はlambdaを介してsort関数のパラメータに格納されます.
    識別子以外の文字に基づいて識別子を作成し、同じ文字が表示されないように識別子を順番に配置します.


  • 文字ログがソートされている場合は、数値ログが返されます.
  • コード作成

    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)
                    
            letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
            # print(letters)
            return letters + digits
    

    整理する😄


    Reference
  • 朴尚吉,『Pythonアルゴリズムインタビュー』,書満(2020),p 138-14.
  • Pythonの公式ドキュメント-ソート方法