您的位置:首页 > 其它

leetcode Valid Anagram 异位体

2015-08-05 17:23 162 查看
Given two strings s and t, write a function to determine if t is an anagram of s.

For example,

s = "anagram", t = "nagaram", return true.

s = "rat", t = "car", return false.

一开始简单想法就是先将两个字符串排序,最后比较即可:结果时间复杂度大了:

void sel(char *a,int n){
int i,j;
int k;
char max;
for(i=0;i<n-1;i++)
{max=a[0];k=0;
for(j=0;j<n-i;j++)
if(max<a[j]){max=a[j];k=j;}
char temp=a[k];
a[k]=a[n-i-1];
a[n-i-1]=temp;}
}
bool isAnagram(char* s, char* t) {
int l1=strlen(s);
int l2=strlen(t);
if(l1!=l2)return false;
sel(s,l1);
sel(t,l2);
for(int i=0;i<l1;i++)
if(s[i]!=t[i])return false;
return true;
}


又想到这是字符匹配问题,故可以用一个Int[26]数组存储对应小写字母出现的个数。在确定两个字符串长度一致时,26个字母出现字数对应一样说明两者是一样的,只不过在各自字符串出现的顺序不一样:

bool isAnagram(char* s, char* t) {
int l1=strlen(s);
int l2=strlen(t);
int a[26]={0};
int b[26]={0};
if(l1!=l2)return false;
for(int i=0;i<l1;i++)
a[s[i]-'a']++;
for(int i=0;i<l2;i++)
b[t[i]-'a']++;
for(int i=0;i<26;i++)
if(a[i]!=b[i])return false;
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: