代码随想录算法训练营第五天--哈希表1 || 242.有效的字母异位词 / 349.两个数组的交集 / 202.快乐数 / 1.两数之和 - 详解
代码随想录算法训练营第五天--哈希表1 || 242.有效的字母异位词 / 349.两个数组的交集 / 202.快乐数 / 1.两数之和
前言:哈希表介绍
哈希表有三类:数组、set、map。
- 在哈希值比较小、范围比较小、范围可控,用
数组;- 数值很大,用
setk对应有value,就用map
哈希表最擅长解决 给定一个元素,判断在这个集合里是否出现过
242.有效的字母异位词
文档讲解:代码随想录算法训练营
视频讲解:算法公开课
状态:自己做出来了,是先判断大小,再用数组进行解决
自己的解答
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;
int n = s.size();
int count[26] = {
0};
for (int i = 0; i < n; i++) {
count[s[i] - 'a'] ++;
count[t[i] - 'a'] --;
}
for (int i = 0; i < 26; i++) {
if (count[i] != 0) return false;
}
return true;
}
};
最开始遇到的问题是最后的return true写到了最后一个for循环里,这样会造成这个函数无返回。
我的做法的优点是,先判断完大小之后,就可以少写一个for循环,一个for循环就可以更新完数组
数组解法
这道题范围比较小,只有26个英文字母,所以我们选择使用 数组 来求解
class Solution {
public:
bool isAnagram(string s, string t) {
int hash[26] = {
}; // 定义哈希数组
// 遍历 s 数组
for (int i = 0

浙公网安备 33010602011771号