leetcode 49 雜湊 字典 質數

2021-10-12 01:43:40 字數 1803 閱讀 6365

解法一:

容易想到用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 思路 還是...