力扣刷题49题字母异位

本篇是记录力扣刷题总字母异位。涉及到hashmap

  • 1、前述介绍:
  • 输入形式: [eat,tea,tan,ate,nat,bat]
  • 输出形式:[[eat,tea,ate],[tan,nat]]
  • 针对上述算法求解有俩种方法:
    • 1、第一种是先排序,针对字母排序后每个字符串相等,这种时间复杂度是nlogn,
    • 2、本文使用的是方法2:具体的思路如下:
      2.1、俩种方法,一种是排序eat->aet,比较简单,非暴力不是最优解,nlogn
      2.2、最优解法:
      2.3、检查是否为空数组
      2.4、建立一个长度为26的数组
      2.5、遍历所有的字符串,将字母的出现频率放到数组的对应的位置(利用acsi),
      2.6、遍历数组,按照相同字幕出现的频率进行分组归类(利用hashmap)
      2.7、 遍历map,将结果返回
  • 2、代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
    //[eat,tea,tan,ate,nat,bat]
    //俩种方法,一种是排序eat->aet,比较简单,非暴力不是最优解,nlogn
    //最优解法:
    //1检查是否为空数组
    //2建立一个长度为26的数组
    //3遍历所有的字符串,将字母的出现频率放到数组的对应的位置(利用acsi),
    //4遍历数组,按照相同字幕出现的频率进行分组归类(利用hashmap)
    //5遍历map,将结果返回
    var groupAngrams=function (strs) {
        if(strs.length===0){
            return [];
        }
        const map=new Nap();
        //遍历
        for(const str of strs){
            //对每一个单词进行处理
            const characters=Array(26).fill(0);//得到26个0的数组
            for(let i=0;i<str.length;i++){
                const  ascii=str.charCodeAt(i)-97;//取出对应的位置,使用后ascii
                characters[ascii]++;
            }
            //第一步生成key;
            const  key=characters.join("");//数组变为字符串
            if(map.has(key)){
                map.set(key,map.get(key).push(str));
            }else{
                map.set(key,[str]);
            }
        }
        const result=[];
        for(const arr of map){
            result.push(arr[1]);
        }
        return result;

    }



</script>
  • 3、总结
    本篇介绍了es6的一个语法操作以及在字符转换时候使用ascii中的charcodeAt得到对应的字幕的ascii,通过减去97可以得到当前的索引,算是一个小的trick deal。另外值得存储使用hashmap。看完记得点赞关注和收藏喔。微信搜索:知识图谱NLP可关注公众号。
好的,关于力扣刷题C++常用操作,我可以给你一些常见的操作和技巧: 1. 使用 STL 容器和算法库:STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,包含了许多常用的容器和算法。在力扣刷题中,使用 STL 可以大大提高代码的效率和可读性。例如,vector 可以用来存储动态数组,sort 可以用来排序等等。 2. 使用 auto 关键字:auto 关键字可以自动推导变量类型,可以减少代码量和提高可读性。例如,auto x = 1; 可以自动推导出 x 的类型为 int。 3. 使用 lambda 表达式:lambda 表达式是 C++11 中引入的一种匿名函数,可以方便地定义一些简单的函数对象。在力扣刷题中,使用 lambda 表达式可以简化代码,例如在 sort 函数中自定义比较函数。 4. 使用位运算:位运算是一种高效的运算方式,在力扣刷题中经常会用到。例如,左移运算符 << 可以用来计算 2 的幂次方,右移运算符 >> 可以用来除以 2 等等。 5. 使用递归:递归是一种常见的算法思想,在力扣刷题中也经常会用到。例如,二叉树的遍历、链表的反转等等。 6. 使用 STL 中的 priority_queue:priority_queue 是 STL 中的一个容器,可以用来实现堆。在力扣刷题中,使用 priority_queue 可以方便地实现一些需要维护最大值或最小值的算法。 7. 使用 STL 中的 unordered_map:unordered_map 是 STL 中的一个容器,可以用来实现哈希表。在力扣刷题中,使用 unordered_map 可以方便地实现一些需要快速查找和插入的算法。 8. 使用 STL 中的 string:string 是 STL 中的一个容器,可以用来存储字符串。在力扣刷题中,使用 string 可以方便地处理字符串相关的问。 9. 注意边界条件:在力扣刷题中,边界条件往往是解决问的关键。需要仔细分析目,考虑各种边界情况,避免出现错误。 10. 注意时间复杂度:在力扣刷题中,时间复杂度往往是评判代码优劣的重要指标。需要仔细分析算法的时间复杂度,并尽可能优化代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值