这题和383赎金信有点像
我用了两个哈希表,题解只用了一个,然后对另一操作时,使用–操作,还挺有启发性的。
#include<iostream>
#include<unordered_map>
using namespace std;
class Solution {
public:
bool isAnagram(string s, string t) {
unordered_map<char, int>smap;
unordered_map<char, int>tmap;
for (int i = 0; i < s.size(); i++) {
smap[s[i]]++;
}
for (int i = 0; i < t.size(); i++) {
tmap[t[i]]++;
}
if (smap.size() != tmap.size()) {
return false;
}
for (auto it1 = smap.begin(); it1 != smap.end(); it1++) {
auto it2 = tmap.find(it1->first);
if (it2 == tmap.end())return false;
else if (it1->second != it2->second) {
return false;
}
}
return true;
}
};
//题解方法,只用了一个哈希表
class Solution1 {
public:
bool isAnagram(string s, string t) {
if (s.length() != t.length()) {
return false;
}
vector<int> table(26, 0);
for (auto& ch : s) {
table[ch - 'a']++;
}
for (auto& ch : t) {
table[ch - 'a']--;
if (table[ch - 'a'] < 0) {
return false;
}
}
return true;
}
};
int main() {
Solution test;
string s = "anagram";
string t = "nagarad";
cout << test.isAnagram(s, t);
}