[LeetCode练习题-C语言]242. Valid Anagram
题目
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.
Note:
You may assume the string contains only lowercase alphabets.
我的答案
bool isAnagram(char* s, char* t) {
int i,j,k,sameNum=0;
if(strlen(s) != strlen(t))
return false;
for(i=0;i<strlen(s);i++)
{
for(j=0;j<=strlen(t)-sameNum;j++){
if(j ==strlen(t)-sameNum ){
return false;
}else if(s[i]==t[j]){
sameNum++;
for(k=j;k<strlen(t)-sameNum;k++){
t[k]=t[k+1];
}
break;
}
}
}
return true;
}
结果显示 Time Limit Exceeded,即超时;改变思路,搞定!代码如下:
bool isAnagram(char* s, char* t) {
int i,j,temp;
if(strlen(s) != strlen(t))
return false;
int lenth = strlen(s) ;
for(i=0;i<lenth;i++)
{
for(j=i;j<=lenth;j++){
if(j == lenth ){
return false;
}else if(s[i]==t[j]){
temp = t[i];
t[i]=t[j];
t[j]=temp;
break;
}
}
}
return true;
}
但是我的代码效率还是不高,下面是别人的代码
bool isAnagram(char* s, char* t) {
int check_s[26]={0};
int i;
int indexs;
int indext;
for(i=0;(s[i]!='\0')||(t[i]!='\0');i++)
{
indexs=s[i]-'a';
check_s[indexs]++;
indext=t[i]-'a';
check_s[indext]--;
}
for(i=25;i>=0;i--)
{
if(check_s[i]!=0)
return false;
}
return true;
}