首先,正确理解题目,题目的意思是说判断t是否是s经过重新排列后得到的字符串,也就是说,s和t具有完全相同的子串。
思路:
首先判断s.len != t.len,否则false,是则下一步判断,是否含有相同的字符且字符出现个数均相同。
这里用到unordered_map,遍历了三次,通过比较得到结果
#include <iostream>
#include <unordered_map>
using namespace std;
class Solution {
public:
bool isAnagram(string s, string t) {
unordered_map<char,int> um1;
unordered_map<char,int> um2;
bool flag = true;;
for(char ch : s)
um1[ch]++;
for(char ch : t)
um2[ch]++;
if(s.length() != t.length())
return false;
else{
for(int i = 0;i < t.length();i++){
if(um1.count(t[i])){
if(um2[t[i]] == um1[t[i]]){
flag = true;
}
else return false;
}
else return false;
}
}
return flag;
}
};
int main() {
Solution so;
/*int m[6] = {1,2,2,1,3,4};
int n[5] = {2,2,1,1,4};
vector<int> a(m, m + 6);
vector<int> b(n, n + 5);
vector<int> res = so.intersection(a,b);
*/
string s = "ab";
string t = "a";
cout << so.isAnagram(s,t) << endl;
system("pause");
return 0;
}