題目描述
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:輸入: [「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...