问题:两个字符串,判断是不是通过改变字符位置得到对方。
思路:建立hash表查找。一开始用unordered_multimap,key-value分别是“字符-字符是否出现”,但是超时了;后来变成用unordered_map,key-value分别是“字符-字符出现次数”,遍历完了如果hash表刚好被删除,就说明true
class Solution {public:
bool isAnagram(string s, string t) {
int s_len=s.size();
int t_len=t.size();
if(s_len != t_len) return false;
unordered_map<char,int> dict;
//建立hash表
for(int i=0;i<s_len;i++){
if(dict.count(s[i])){
dict[s[i]]++;
}else{
dict.insert(make_pair(s[i],1));
}
}
//查找并同时删除出现过的hash元素
for(int i=0;i<t_len;i++){
if(dict.count(t[i])){
dict[t[i]]--;
if(dict[t[i]] == 0){
dict.erase(t[i]);
}
}else{
return false;
}
}
//如果hash刚好被删除完毕,就true
if(dict.size() == 0)
return true;
else
return false;
}
};