思路分析:
这道题我自己的做法是:
(1) 定义一个字符型到整型的map映射,然后记录第一个字符串中字符的出现次数
(2)再定义一个变量记录第一个字符串中元素的个数,为了防止出现子串包含的情况
(3)遍历第二个字符串,看第二个字符串中有没有第一个字符串中的字符
官方的解法是:
(1)先判断两个字符串的长度是否相等,如果不相等的话直接返回false
(2)对两个字符串进行排序,再比较是否相等,如果相等直接返回true,反之。
代码实现(方法1):
class Solution {
public:
bool isAnagram(string s, string t) {
int len1=s.size();
int len2=t.size();
map<char,int>a;
for(int i=0;i<len1;i++)
a[s[i]]++;
int count=len1;
for(int i=0;i<len2;i++)
{
if(a[t[i]]==0)
{
return false;
}
else if(a[t[i]]>0)
{
a[t[i]]--;
count--;
}
}
if(count==0)
return true;
else return false;
}
};
代码实现(方法2):
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size())
return false;
sort(s.begin(),s.end());
sort(t.begin(),t.end());
if(s==t)
return true;
return false;
}
};