力扣:49. 字母异位词分组(JavaScript)

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一

解题思路:使用哈希表,同样的字母组合有同样的如何找到相同的键有两个思路,1:记录每个字母出现的次数;2:把字母排序。

一:字母排序

function groupAnagrams(strs) {
    const map = {}; // 创建一个哈希表

    for (let str of strs) {
        // 将字符串排序后作为键
        const sortedStr = str.split('').sort().join('');

        // 如果键不存在,初始化为空数组
        if (!map[sortedStr]) {
            map[sortedStr] = [];
        }

        // 将当前字符串加入对应的数组
        map[sortedStr].push(str);
    }

    // 返回哈希表的所有值
    return Object.values(map);
}

二:记录字母出现次数

function groupAnagrams(strs) {
    const map = {}; // 创建一个哈希表

    for (let str of strs) {
        // 创建一个长度为26的数组,用于记录每个字母的出现次数
        const count = new Array(26).fill(0);

        // 遍历字符串,更新计数数组
        for (let char of str) {
            count[char.charCodeAt(0) - 'a'.charCodeAt(0)]++;
        }

        // 将计数数组转换为字符串作为键
        const key = count.join(',');

        // 如果键不存在,初始化为空数组
        if (!map[key]) {
            map[key] = [];
        }

        // 将当前字符串加入对应的数组
        map[key].push(str);
    }

    // 返回哈希表的所有值
    return Object.values(map);
}

欢迎大家补充新的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值