leetcode刷题日记之第二题(字母异位词分组)(哈希表)

原题如下:

  简单说就是构成一个字母的单词,重新排序可以组成新的单词,要求把strs数组中包含字母一样的单词放到一个新的数组中

解题思路就是用到哈希表来解决,这个题可以用两个指标来作为哈希表的键,首先说第一个

①字母出现次数:

所有的异位词中,每个字母的出现次数相同,例如:tea eat中 a e t 分别只出现了一次,所以可以考虑用字母的出现次数做为哈希表的键,具体代码如下(下述代码均为JavaScript代码):

var groupAnagrams = function(strs) {
    const map = new Object();//创建一个名为map的哈希表
    for (let s of strs){
        count = new Array(26).fill(0);//创建一个长度为26的数组并用0填满,来作为字母的出现次数
        for ( let c of s){
            count[c.charCodeAt() - 'a'.charCodeAt()]++;//在count数组0-25的索引代表从a到z排列
        }//如果a出现一次,就让count[0]++,其它字母同理
        map[count] ? map[count].push(s) : map[count]=[s];
    }//这是一个三目表达式,如果map哈希表中的键count存在,那就让字符s加入到该count键所对应的数组的最后一位;
//如果不存在,将字符串s构建为一个新的数组加入到该count键所对应的数组的第一位
    return Object.values(map);
};

②所出现的字母:

所有的异位词中,总共出现字母的字母一定相同,例如 tea 和eat中 只存在 a e t这三个字母,所以,可以考虑让排序后的字母作为键,具体代码如下:

var groupAnagrams = function(strs) {
    const map =  new Map();//Map()可以用来存储键值对,并且可以记忆键值对的插入顺序
    for (let str of strs){
        //这里考虑要给字母排序,所以先将str从字符串转化为数组
        //因为sort是数组的内置方法
        let array = Array.from(str);
            array.sort();
        let key = array.toString();//再将排序后的字符数组转换为字符串,然后作为哈希表的键
        let list = map.get(key) ? map.get(key) : new Array();
        //如果key对应的value存在,就将该value赋值给list ,否则创建一个新的数组
        //因为第一次遍历,key对应的value肯定不存在,所以会创建一个新的数组赋值给list
        list.push(str);
        //然后list将这个str如tea添加到数组中
        map.set(key ,list);
        //此时map中aet键对应的value为list数组中的tea
        //下次遍历时,如果判断map.get(abc)是否存在,如果存在就调用已经存放了tea的那个list
    }
        return Array.from(map.values());
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值