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);
};
posted @ 2024-03-01 21:05  Frommoon  阅读(6)  评论(0编辑  收藏  举报