Group Anagrams [leetcode]

題目會給出很多的單詞,根據每個單詞擁有的字元進行分組。

  • 將擁有的字元完全相同者作為一組。
  • 字元可能會重複,同一字元數量不同者視為不同。

字典法比較直覺,就是將所有的文字拆成字元之後,將其排序並作為key值。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:


        return_arr = {}
        for s in strs:
            letters = list(s)
            letters.sort()
            label = "".join(letters)
            if label not in return_arr:
                return_arr[label] = [s]
            else:
                return_arr[label].append(s)
            
        return [unit for unit in return_arr.values()]         

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:

        return_arr = {}
        for s in strs:
            letters = list(s)
            letters_arr = [0]*26
            for letter in letters:
                letter_idx = ord("z")-ord(letter)
                letters_arr[letter_idx]+=1
            letters_arr = tuple(letters_arr)
            if letters_arr not in return_arr:
                return_arr[letters_arr] = [s]
            else:
                return_arr[letters_arr].append(s)
            
                
            
        return [unit for unit in return_arr.values()]      

使用tuple也可以解,也是先將所有的文字拆成字元。

然後製作出字元表用來計數:

letters_arr = [0]*26

找出該字元的編號後進行計數:

letter_idx = ord("z")-ord(letter)
letters_arr[letter_idx]+=1

最後將計數表轉成tuple並作為key值。

letters_arr = tuple(letters_arr)
if letters_arr not in return_arr:
    return_arr[letters_arr] = [s]
else:
    return_arr[letters_arr].append(s)

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。