给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。(出现的相同字母次数相同)
输入: s = "anagram", t = "nagaram"
输出: true
c plus
排序法
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s == t;
}
};
哈希
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;
char array[26];
memset(array, 0, 26);
for (int i = 0; i < s.size(); i++) {
array[s[i] % 26]++;
}
for (int i = 0; i < t.size(); i++) {
array[t[i] % 26]--;
}
for (int i = 0; i < 26; i++) {
if (array[i] != 0) return false;
}
return true;
}
};
//上面写的有点啰嗦,改一下:
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;
int n = s.size();
char array[26];
memset(array, 0, 26);
for (int i = 0; i < n; i++) {
array[s[i] - 'a']++;
array[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (array[i] != 0) return false;
}
return true;
}
};
%E7%BB%99%E5%AE%9A%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%20s%20%E5%92%8C%20t%20%EF%BC%8C%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%E6%9D%A5%E5%88%A4%E6%96%AD%20t%20%E6%98%AF%E5%90%A6%E6%98%AF%20s%20%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D%E3%80%82(%E5%87%BA%E7%8E%B0%E7%9A%84%E7%9B%B8%E5%90%8C%E5%AD%97%E6%AF%8D%E6%AC%A1%E6%95%B0%E7%9B%B8%E5%90%8C)%0A%60%60%60%0A%E8%BE%93%E5%85%A5%3A%20s%20%3D%20%22anagram%22%2C%20t%20%3D%20%22nagaram%22%0A%E8%BE%93%E5%87%BA%3A%20true%0A%60%60%60%0A%0A%23%23%23%20c%20plus%20%0A%0A%0A%20%E6%8E%92%E5%BA%8F%E6%B3%95%0A%60%60%60c%0Aclass%20Solution%20%7B%0Apublic%3A%0A%20%20%20%20%20%20%20bool%20isAnagram(string%20s%2C%20string%20t)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(s.size()%20!%3D%20t.size())%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20sort(s.begin()%2C%20s.end())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20sort(t.begin()%2C%20t.end())%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20s%20%3D%3D%20t%3B%0A%20%20%20%20%20%20%20%7D%0A%20%7D%3B%0A%0A%60%60%60%0A%0A%20%E5%93%88%E5%B8%8C%0A%0A%60%60%60c%0Aclass%20Solution%20%7B%0Apublic%3A%0A%20%20%20%20bool%20isAnagram(string%20s%2C%20string%20t)%20%7B%0A%20%20%20%20%20%20%20%20if%20(s.size()%20!%3D%20t.size())%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20char%20array%5B26%5D%3B%0A%20%20%20%20%20%20%20%20memset(array%2C%200%2C%2026)%3B%0A%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20s.size()%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20array%5Bs%5Bi%5D%20%25%2026%5D%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20t.size()%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20array%5Bt%5Bi%5D%20%25%2026%5D—%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%2026%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(array%5Bi%5D%20!%3D%200)%20%20return%20false%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A%2F%2F%E4%B8%8A%E9%9D%A2%E5%86%99%E7%9A%84%E6%9C%89%E7%82%B9%E5%95%B0%E5%97%A6%EF%BC%8C%E6%94%B9%E4%B8%80%E4%B8%8B%EF%BC%9A%0Aclass%20Solution%20%7B%0Apublic%3A%0A%20%20%20%20bool%20isAnagram(string%20s%2C%20string%20t)%20%7B%0A%20%20%20%20%20%20%20%20if%20(s.size()%20!%3D%20t.size())%20return%20false%3B%0A%20%20%20%20%20%20%20%20int%20n%20%3D%20s.size()%3B%0A%20%20%20%20%20%20%20%20char%20array%5B26%5D%3B%0A%20%20%20%20%20%20%20%20memset(array%2C%200%2C%2026)%3B%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20n%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20array%5Bs%5Bi%5D%20-%20’a’%5D%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20array%5Bt%5Bi%5D%20-%20’a’%5D—%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%2026%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(array%5Bi%5D%20!%3D%200)%20%20return%20false%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A%60%60%60%0A%0A