1. 程式人生 > >leetcode 937 Reorder Log Files

leetcode 937 Reorder Log Files

1.題目描述

你有一個日誌陣列 logs。每條日誌都是以空格分隔的字串。

對於每條日誌,其第一個字為字母數字識別符號。然後,要麼:

識別符號後面的每個字將僅由小寫字母組成,或; 識別符號後面的每個字將僅由數字組成。 我們將這兩種日誌分別稱為字母日誌和數字日誌。保證每個日誌在其識別符號後面至少有一個字。

將日誌重新排序,使得所有字母日誌都排在數字日誌之前。字母日誌按字母順序排序,忽略識別符號,識別符號僅用於表示關係。數字日誌應該按原來的順序排列。

返回日誌的最終順序。

示例 :

輸入:[“a1 9 2 3 1”,“g1 act car”,“zo4 4 7”,“ab1 off key dog”,“a8 act zoo”] 輸出:[“g1 act car”,“a8 act zoo”,“ab1 off key dog”,“a1 9 2 3 1”,“zo4 4 7”]

提示:

0 <= logs.length <= 100 3 <= logs[i].length <= 100 logs[i] 保證有一個識別符號,並且識別符號後面有一個字。

2.解題思路

這道題是對於sorted函式學習的一個很好的機會。 在查詢Python3文件之後,我們發現sorted函式可以比較返回值,並且值可以是元組。在這種情況下,它將按順序比較元組中的關鍵字。例如,如果第一個元素等於,則檢查第二個元素。與本題要求一致。在這個問題中,它返回(0,rest,id_)和(1,),0 <1,這樣字元總是在數字之前。如果它們都是字元,則會比較其餘的字元。

3.Python程式碼

class Solution:
    def reorderLogFiles(self, logs):
        """
        :type logs: List[str]
        :rtype: List[str]
        """
        def f(log):
            id_, rest = log.split(" ", 1)
            return (0, rest, id_) if rest[0].isalpha() else (1,)

        return sorted(logs, key = f)