給定一個(gè)字符串?dāng)?shù)組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。
示例:
輸入:["eat", "tea", "tan", "ate", "nat", "bat"],
輸出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]
說(shuō)明:
所有輸入均為小寫(xiě)字母。
不考慮答案輸出的順序。
解題思路:
遇到分類(lèi)為題,首先要想到python的字典,字典的鍵可以作為類(lèi)別,值就是該類(lèi)別下的數(shù)據(jù)了。這道題可以用排序后的字符串作為鍵,而不同的字母異位詞就是值了。另外,在python字典中,可以之間使用 字典名[新的鍵]=新的值來(lái)添加一個(gè)新的鍵值對(duì)。但是不可以直接訪(fǎng)問(wèn)一個(gè)沒(méi)有鍵名的值,會(huì)拋出異常。在本題中,我們遍歷原始數(shù)組并添加到字典時(shí),會(huì)遇到直接訪(fǎng)問(wèn)值的情況,這里可以用到collections庫(kù)中的defaultdict類(lèi)型,它需要一個(gè)默認(rèn)參數(shù),當(dāng)遇到?jīng)]有鍵名的情況下可以自動(dòng)生成并賦予該默認(rèn)值。具體可以參考下面的代碼理解。
代碼如下:
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
dic = collections.defaultdict(list)
for i in strs:
dic[''.join(sorted(i))].append(i)
#此時(shí)直接訪(fǎng)問(wèn)了字典的值,如果字典沒(méi)有對(duì)應(yīng)的鍵會(huì)拋出異常,所以要使用defaultdict
return list(dic.values())