思路
首先两个字符串的长度肯定得相等,否则一定不是字母异位词。
然后维护一个长度为26的字母频率数组,用于存储每个字母出现的次数。第一个字符串的字母每次出现频率+1,第二个字符串的字母每次出现频率-1。这样的话,如果最终所有字母的频率都为0,则表示两个字符串的字母出现次数一样多,即是字母异位词。
代码
class Solution {
public:
bool isAnagram(string s, string t) {
// 数组长度
const int N = 26;
// 初始化为0
int frequency[N] = {0};
// 长度不等则一定不是字母异位词
if (s.length() != t.length())
return false;
// 遍历两个字符串
for (int i = 0; i < s.length(); i++) {
frequency[s[i] - 'a']++;
frequency[t[i] - 'a']--;
}
// 遍历频率数组,如果出现不为0的频率则说明不是字母异位词
for (int i = 0; i < N; i++) {
if (frequency[i] != 0)
return false;
}
return true;
}
};