代码随想录day6-242,349,202,1

这篇博客分享了使用哈希法解决四道算法题的经验,包括判断字母异位词、计算两个数组的交集、判断快乐数以及寻找两数之和。通过哈希表(set和map)提高算法效率,重点讲解了哈希映射和去重策略。
摘要由CSDN通过智能技术生成

目录

一些知识点

【题目:242】

【方法】

【题目349】

【方法:哈希法set】

【此题收获】

【题目202】

【方法:哈希法set】

【此题收获】

【题目1】

【方法:哈希法map】

【此题收获】


一些知识点

  •  再遍历字符串s的时候,只需要将 s[i] - 'a'即可映射到s[i]所在元素在26位字母中的下标,并不需要记住字符a的ASCII

  • 而且如果哈希值比较少、特别分散、跨度非常大,用数组就不合适了,数组不适合放很大的数,浪费空间。适合用set

  • unordered-set做映射的时候效率最高,做取值操作时效率也是最高的

  • for(数据类型 A:B):叫做foreach循环,是在B中遍历A的意思

  • C++中的迭代器:如vector中的beigin()就是一个迭代器

242.有效的字母异位词

【题目:242】

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

【示例 1】:

输入: s = "anagram", t = "nagaram" 
输出: true

【示例 2】:

输入: s = "rat", t = "car" 
输出: false

第一想法:把a-z列入到数组里,遍历一个对应index加1统计出现频率

【方法】

定义一个数组叫做record用来上记录字符串s里字符出现的次数。

需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。

那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。

那么最后检查一下,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值