Every day a leetcode
题目来源:242. 有效的字母异位词
解法1:hash
简单题的hash都是一个模子里出来的。
代码:
#define MAX_HASH_LENGTH 26
bool isAnagram(char * s, char * t){
int hash1[MAX_HASH_LENGTH];
int hash2[MAX_HASH_LENGTH];
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));
for(int i=0;i<strlen(s);i++) hash1[s[i]-'a']++;
for(int i=0;i<strlen(t);i++) hash2[t[i]-'a']++;
for(int i=0;i<MAX_HASH_LENGTH;i++)
{
if(hash1[i]!=hash2[i]) return false;
}
return true;
}
结果:
解法2:排序
若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
基于这个定义,我们将 s 和 t 排序,若排序后两个字符串相等,则说明 s 和 t 互为字母异位词。
所以我们先将2个字符串排序,然后比较即可。
代码:
int cmpfunc (const void * a, const void * b)
{
return ( *(char*)a - *(char*)b );
}
bool isAnagram(char * s, char * t){
qsort(s,strlen(s),sizeof(char),cmpfunc);
qsort(t,strlen(t),sizeof(char),cmpfunc);
return strcmp(s,t) == 0;
}
结果: