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.
从题目看来,得到要求:
1. 长度相同
2. 相同的字母出现次数
一:结合之前做的,采用HASH的方式比较方便,将所有字母出现的次数记录在一个表中,比较两个表是否相同:
bool isAnagram(char* s, char* t) {
char buff[128] = {0};
char buff_new[128] = {0};
if(s == NULL || t == NULL)
return false;
if (strlen(s) != strlen(t))
return false;
int i = 0;
for(i = 0 ; i < strlen(s); i ++){
buff[*(s+i)] += 1;
}
for(i = 0; i < strlen(t); i ++){
buff_new[*(t+i)] += 1;
}
if (memcmp(buff, buff_new, 128) != 0){
return false;
}
return true;
}
二:采用排序后的字符比较方法
因为所有字符只是打乱了顺序,并且长度相同,因此完全可以将字符串进行排序,如果排序后的内容是相同的话,则说明TRUE:
int cmp( const void *a , const void *b )
{
return *(char *)a - *(char *)b;
}
bool isAnagram(char* s, char* t) {
if(s == NULL || t == NULL)
return false;
if (strlen(s) != strlen(t))
return false;
qsort(s, strlen(s), sizeof(char), cmp);
qsort(t, strlen(t), sizeof(char), cmp);
if (strcmp(s, t))
{
return false;
}
else
{
return true;
}
}