49. 字母异位词分组(中)
题目
- 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
题解:字典
- 首先,循环遍历每一个单词,通过排序建立字典的键。其次,将单词加入字典中:分两种情况,如果没有键在字典中,那么新添加一个列表;如果键在字典中,那么在字典中的该键下加入。最后,返回的是list(字典的值)
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
table = {}#创建一个空字典,strs = ["eat", "tea"]
for s in strs:#遍历字符串列表 strs
s_ = "".join(sorted(s))#对当前字符串 s=eat进行排序赋值给s_=aet
if s_ not in table:#s_ 不在字典 table 中,
table[s_] = [s]#所以将 s_ 作为键,将 [s] 作为对应的值存入字典 table={'aet': ['eat']}
else:#当遍历到第二个字符tea时,排序后s_=aet已经在字典 table 中存在
table[s_].append(s)#将当前字符串 s 追加到对应的值列表中,table = {'aet': ['eat', 'tea']}
return list(table.values())#遍历完所有的字符串后,返回字典 table 中的值
- js代码-对象
var groupAnagrams = function(strs) {
let table = {};
for (let s of strs) {
// 将字符串排序并转换为字符串作为键
//console.log(s.split('')) //[ 'e', 'a', 't' ]
let sortedStr = s.split('').sort().join('');
if (table[sortedStr]) {//排序后的键如果在对象中就push
table[sortedStr].push(s);
} else {//不在,就将sortedStr作为键,[s]作为值
table[sortedStr] = [s];
}
}
//console.log(table)//{ aet: [ 'eat', 'tea', 'ate' ], ant: [ 'tan', 'nat' ], abt: [ 'bat' ] }
// 返回对象table中所有可枚举属性的值
return Object.values(table);
};