題目描述
給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。
示例 1:
輸入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
解釋:
在 strs 中沒有字符串可以通過重新排列來形成 “bat”。
字符串 “nat” 和 “tan” 是字母異位詞,因為它們可以重新排列以形成彼此。
字符串 “ate” ,“eat” 和 “tea” 是字母異位詞,因為它們可以重新排列以形成彼此。
示例 2:
輸入: strs = [“”]
輸出: [[“”]]
示例 3:
輸入: strs = [“a”]
輸出: [[“a”]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 僅包含小寫字母
思考一
字母異位詞表示組成的字母數量和字母都相同但位置不同的單詞,可以用哈希表根據這個特征把這些字母異位詞進行歸類。遍歷每個單詞,并對單詞的字符序列按字典序進行排序后重組作為哈希表的 key,哈希表的值存儲字母異位詞數組。判斷如果枚舉的單詞字符序列按字典序排序后從哈希表中查不到,則作為新的key添加到哈希表,哈希表value存儲一個數組,放入排序前的單詞字符串;如果哈希表中已存在key,則直接把未排序的單詞字符串存入對應key的數組中。最后遍歷哈希表把所有值放入一個大數組中返回答案。遍歷一遍單詞數組 O(n)O(n)O(n),記每個單詞的長度為 mmm,則單詞排序約 O(mlogm)O(mlogm)O(mlogm),總的時間復雜度為 O(nmlogm)O(nmlogm)O(nmlogm),空間復雜度為哈希表長度乘以每個值數組的長度約為O(nm)O(nm)O(nm)。
代碼
/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {let map = new Map();for (let s of strs) {let s_ = s.split('').sort().join('');if (map.has(s_)) {map.get(s_).push(s);continue;}map.set(s_, [s]);}return Array.from(map.values