解法一:
容易想到用counter計數然後作為key放進字典,但字典不能被hash,所以只能用桶再轉tuple,**如下:
class
solution
:def
groupanagrams
(self, strs: list[
str])-
> list[list[
str]]:
d =for s in strs:
bm =[0
for _ in
range(26
)]for c in s:
bm[ord(c)
-ord
('a')]
+=1bm =
tuple
(bm)
if bm in d:
d[bm]
else
: d[bm]
=[s]
ret =
for key in d:
)return ret
優化一:defaultdict
做題做多了也會發現很煩的東西,比如字典每次都要看在不在裡面,defaultdct會返回預設值,如果不在的話,不用再加if了,很舒服,**如下:
from collections import defaultdict
class
solution
:def
groupanagrams
(self, strs: list[
str])-
> list[list[
str]]:
d = defaultdict(
list
)for s in strs:
bm =[0
for _ in
range(26
)]for c in s:
bm[ord(c)
-ord
('a')]
+=1bm =
tuple
(bm)
d[bm]
ret =
for key in d:
)return ret
解法二:質數
由於質因數分解很慢,而且質數的乘積唯一,所以可以用質數的乘積做hashing。
from collections import defaultdict
class
solution
:def
groupanagrams
(self, strs: list[
str])-
> list[list[
str]]:
primes =[2
,3,5
,7,11
,13,17
,19,23
,29,31
,41,43
,47,53
,59,61
,67,71
,73,79
,83,89
,97,101
,103
] d = defaultdict(
list
)for s in strs:
key =
1for c in s:
key *= primes[
ord(c)
-ord
('a')]
d[key]
ret =
for key in d:
)return ret
LeetCode 49 字母異位詞分組 雜湊
難度 中等 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。包含的字母相同,但是排列可以不同的字串實際...
LeetCode 49 字母異位詞分組(雜湊表)
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。class solution return newar...
leetcode 49 字母異位
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。通過次數80,334提交次數129,632 思路 還是...