目录
一些知识点
- 再遍历字符串s的时候,只需要将 s[i] - 'a'即可映射到s[i]所在元素在26位字母中的下标,并不需要记住字符a的ASCII
- 而且如果哈希值比较少、特别分散、跨度非常大,用数组就不合适了,数组不适合放很大的数,浪费空间。适合用set
- unordered-set做映射的时候效率最高,做取值操作时效率也是最高的
- for(数据类型 A:B):叫做foreach循环,是在B中遍历A的意思
- C++中的迭代器:如vector中的beigin()就是一个迭代器
【题目: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的操作。
那么最后检查一下,