题目描述
因为s和t仅仅包含小写字母,所以可以开一个26个元素的数组用来做哈希表。不过如果是unicode字符,那就用编程语言自带的哈希表。
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size())
return false;
vector<int> table(26,-1);
for(char ch:s){
if(table[ch-'a'] != -1)
table[ch-'a']++;
else
table[ch-'a']=1;
}
int scnt = s.size();
for(char ch:t){
if(table[ch-'a'] == -1 || table[ch-'a'] == 0)
return false;
table[ch-'a']--;
scnt--;
}
return scnt==0;
}
};
用unordered_map
class Solution {
public:
bool isAnagram(string s, string t) {
int n = s.size();
if(s.size() != t.size())
return false;
unordered_map<char,int> hash_table;
for(char ch:s){
if(hash_table.contains(ch)){
hash_table[ch]++;
}else{
hash_table[ch] = 1;
}
}
for(char ch:t){
if(hash_table.contains(ch)){
n--;
hash_table[ch]--;
if(hash_table[ch] == 0)
hash_table.erase(ch);
}else{
return false;
}
}
return n==0;
}
};