字母的异位数
做leetcode242题时出现了一个错误:
bool isAnagram(string s, string t) {map<char,int> cnt;bool ans = true;int lens = s.length();int lent = t.length();for(int i = 0;i < lens;i++){cnt[s[i]] += 1;cout << cnt[s[i]] << endl;}for(int i = 0;i < lent;i++){if(cnt[t[i]] == 0){cout << t[i] << cnt[t[i]] << endl;ans = false;break;}else{cnt[t[i]] -= 1;}}// if(!cnt.empty()){// cout << "here" << endl;// ans = false;// }for(auto& kv:cnt){if(kv.second != 0){ans = false;break;}}
其中判断map是否为空我使用
if(!cnt.empty()){cout << "here" << endl;ans = false;}
isAnagram 函数的主要问题在于检查 cnt 是否为空的方式。即使在字符串 t 中的字符与 s 完全匹配,cnt 也不会自动变为空,而是会包含值为零的字符计数。即当map里的数全都归零时,map也非空,而是字母和0的映射,因此不能用cnt.empty()
判断,而是选用
for(auto& kv:cnt){if(kv.second != 0){ans = false;break;}}
来判断map内部是否都是0;