題目會給出很多的單詞,根據每個單詞擁有的字元進行分組。
- 將擁有的字元完全相同者作為一組。
- 字元可能會重複,同一字元數量不同者視為不同。
字典法比較直覺,就是將所有的文字拆成字元之後,將其排序並作為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)