💫把简单的事情认真做好。
📆学习日期:2025年1月27日22:22:37
💻学习内容:哈希表理论基础 | 有效的字母异位词
⏲️学习时长:50min
练习题目
题目描述
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的 字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解题思路
- 整体思路&&注意事项
- 利用哈希法来解决问题
- 哈希法的数据结构:数组,set,map
- 本题使用 数组 作为哈希表(字母
a-z
连续,范围可控) - 数组
record[26]
,遍历统计字符串s
中每个字母的频次,遍历字符串t
,频次相减,若最终数组record
所有值为0,则为字母异位词
- 代码实现
int record[26]
- 统计
s
的字母频次 - 在
s
的频次基础之上,根据t
的频次进行操作 - 判断
record
是否全为0
Bug
无😏
//2025年1月27日22:59:35
//2025年1月27日23:07:53
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26]={0};//定义哈希表
int lenth=sizeof(record)/sizeof(record[0]);//数组长度
for(int i=0;i<s.size();i++){
record[s[i]-'a']++;//统计字符串s的字母频次
}// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
for(int j=0;j<t.size();j++){
record[t[j]-'a']--;
}
for(int i=0;i<lenth;i++){
if(record[i]!=0) return false;//不是字母异位词
}
return true;//
}
};
学习总结
- 想要使用哈希法时,可以先看看是否可以用 数组 结构
int record[26]={0};
//数组赋值int lenth=sizeof(record)/sizeof(record[0]);//数组长度