给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
方法一时间太长(改用哈希):
class Solution {
public:
bool isAnagram(string s, string t) {
int len1,len2;
int temp,i,j,tail1;
len1=s.size();
len2=t.size();
tail1=len1-1;
if(len1!=len2)
{
return false;
}
for(j=0;j<len1-1;j++)
{
for(i=0;i<tail1;i++)
{
if(s[i]>s[i+1])
{
temp=s[i+1];
s[i+1]=s[i];
s[i]=temp;
}
if(t[i]>t[i+1])
{
temp=t[i+1];
t[i+1]=t[i];
t[i]=temp;
}
}
tail1--;
}
/*
for(i=0;i<len1;i++)
{
printf("%c ",s[i]);
}
printf("\n");
for(i=0;i<len1;i++)
{
printf("%c ",t[i]);
}
*/
for(i=0;i<len1;i++)
{
if(s[i]!=t[i])
{
return false;
}
}
return true;
}
};
方法二,自己实现递归:
class Solution {
public:
bool isAnagram(string s, string t) {
int len1,len2,i;
len1=s.size();
len2=t.size();
int s1[26]={0};
int s2[26]={0};
if(len1!=len2)
{
return false;
}
for(i=0;i<len1;i++)
{
s1[s[i]-'a']++;
s2[t[i]-'a']++;
}
for(i=0;i<26;i++)
{
if(s1[i]!=s2[i])
{
return false;
}
}
return true;
}
};
方法三,可以调hash库函数