49 字母異位詞分組

2021-10-12 15:55:42 字數 1562 閱讀 7672

題目描述

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。

示例:輸入: [「eat」, 「tea」, 「tan」, 「ate」, 「nat」, 「bat」]

輸出:[

[「ate」,「eat」,「tea」],

[「nat」,「tan」],

[「bat」]

]說明:

所有輸入均為小寫字母。

不考慮答案輸出的順序。

題目解析

這個題我們依舊拿集合來分析,每個單詞都是個集合,那麼我們的目的就是找出集合裡元素數目和種類都一樣的集合。

字母在asscii碼中都有對應的數字,因此我們把問題轉化為集合裡數字的問題,我們可以對每個集合的數字進行排序,也就是對字母進行個排序,排序後,每個單詞都會有對應的新的字元列表。

strslist =

[(one,

tuple

(sorted

(one)))

for one in strs]

#output[(

'eat',(

'a',

'e',

't')),

('tea',(

'a',

'e',

't')),

('tan',(

'a',

'n',

't')),

('ate',(

'a',

'e',

't')),

('nat',(

'a',

'n',

't')),

('bat',(

'a',

'b',

't')

)]

我們這時候只需要遍歷原列表,把排序後相同的字元列表對應的原字串新增到同乙個列表就可以了,這裡我們可以運用python字典的setdefault()方法,以排序後的字串元組作為key,原字串作為value,先對原字串進行分類

strdict.setdefault(one[1]

,)0]

)#output

最後對輸出做個格式處理就可以了,字典的值分別新增到列表裡面

for k in strdict.keys():

)

完整**
def

groupanagrams

(strs)

strdict =

strlist =

strslist =

[(one,

tuple

(sorted

(one)))

for one in strs]

#print(strslist)

for one in strslist:

strdict.setdefault(one[1]

,)0]

)#print(strdict)

for k in strdict.keys():

)return strlist

49 字母異位詞分組

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。思路 這個題的思路非常清晰,遍歷字串陣列,對其中每乙個...

49 字母異位詞分組

arrays.sort排序的時間複雜度為o slogs 外面還有n次迴圈,總共為nslogs,s為字串的長度。空間複雜度為o ns hashmap儲存了每個字串 1 我對arraylist操作不熟,還有arrays.sort 得趕緊學習了 2 乙個字串會有原始字元,所以只要知道原始字元,原始字元下一...

49 字母異位詞分組

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 1.對每個子串排序生成乙個新的陣列,構造乙個字典d,遍歷新陣列往字典裡放 o nklogk o nk 2...