Leetcode Link:异位词
代码随想录:详解
题目原文
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
1 <= s.length, t.length <= 5 * 104s和t仅包含小写字母
思路分析
- 暴力法思路:双重循环遍历查重相同字符。同时开一个数组记录数组
t对应元素“是否已查重”,用于避免一个相同字母字符被查重两次造成。 - 更好、更常见的思路:哈希表。使用不重复的key-value对来记录各个字母的出现次数,最后实现每个字母“字字有回应”。
- 更详细的设计:开个数组记录26个字母的重复次数(出现次数)。两个数组各遍历一次,第一次存储数组各字母字符出现次数,第二次按出现次数减去对应次数。如果两个字符串存储异位词,那么最后数组应当为全零数组。
题解与要点
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0};
for (int i = 0; i < s.size(); i++) {
// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
record[s[i] - 'a']++;
}
for (int i = 0; i < t.size(); i++) {
record[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (record[i] != 0) {
// record数组有的元素不为0,存在多字少字
return false;
}
}
// record数组所有元素都为0,说明字符串s和t是字母异位词
return true;
}
};
LeetCode 242: 判断字母异位词
879

被折叠的 条评论
为什么被折叠?



