首先,正确理解题目,题目的意思是说判断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;
}
本文介绍了一种用于判断两个字符串是否可以通过重新排列彼此匹配的算法。该算法使用unordered_map记录每个字符串中字符出现的次数,然后对比两个映射是否完全一致。若字符串长度不同或字符频次不匹配,则返回false。
303

被折叠的 条评论
为什么被折叠?



