主題

LeetCode - 937. Reorder Data in Log Files 解題心得

Not In My Back Yard | 2021-02-18 00:00:01 | 巴幣 0 | 人氣 19

題目連結:


題目意譯:
給定一串紀錄之陣列 logs。每筆紀錄為多個字詞以空格作為分隔點之字串,其中第一個字詞為識別碼。

紀錄檔有兩種:
字母紀錄:每個字詞(除了識別碼)由小寫英文字母組成。
數字紀錄:每個字詞(除了識別碼)由數字組成。

重新排列這些紀錄,使得:
字母紀錄位於數字紀錄之前面。
字母紀錄依據其內容按照字典序排列。如果內容相同,則以識別碼按字典序排列。
數字紀錄則保持相對之順序。

回傳最終的紀錄之內容。

限制:
1 ≦ logs.length ≦ 100
3 ≦ logs[i].length ≦ 100
logs[i] 中所有字詞以一個空格隔開。
logs[i] 保證含有一個識別碼以及至少一個字詞於識別碼後。



範例測資:
範例 1:
輸入: 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"]
解釋:
字母紀錄的內容全部都不一樣,因此他們的順序為 "art can", "art zero", "own kit dig"。
數字紀錄之相對順序為 "dig1 8 1 5 1", "dig2 3 6" 。

範例 2:
輸入: 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"]


解題思維:
我們需要先掃過一次 logs,將字母紀錄以及數字紀錄分離出來。

然後對於字母紀錄以他們的內容或是識別碼按字典序排序。排完之後再接在數字紀錄的前面,才會是所求的紀錄之內容。



說起來很簡單,但是對於 C 、 C++ 、 Java 等語言不是很友善,要自己寫的事情不少,而且排序也有先看內容再看識別碼的特殊規則。總之是一道稍嫌麻煩的題目。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作