题目:判断2个字符串是不是Anagram(即字母组成相同,顺序不同)
分析:统计字符串里的字母出现的频数,然后看是否相等。
答案:
class Solution {
public:
bool isAnagram(string s, string t) {
int al_size = 26;
int sc[al_size];memset(sc, 0, sizeof(int)*al_size);
int tc[al_size];memset(tc, 0, sizeof(int)*al_size);
if (s.size() != t.size())
return false;
for (int i = 0; i< s.size(); i++){
sc[s[i] - 'a']++;
tc[t[i] - 'a']++;
}
for (int i = 0 ;i < al_size; i++){
if (sc[i]!= tc[i])
return false;
}
return true;
}
};
扩展:
也可以采用先排序再判断排序后的字符串是否相等的办法(这样不会改变s和t):
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s == t;
}
};
计数的数组只需要1个,一个+一个-,最后判断是否为0即可。