1、题目
在英语中,如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,那么这两个单词互为变位词(Anagram),例如,silent与listen,evil与live等互为变位词。请完成一个函数,判断输入的两个字符串是否互为变位词。
2、解题思路
我们可以用创建一个数组实现简单的哈希表,用来统计字符串中每个字符出现的次数。当扫描第一个字符串中的每个字符时,为哈希表对应的项的值增加1,。接下来扫描第二个字符串,扫描到每个字符时,为哈希表对应的项的值减去1,。如果扫描完第二个字符串后,哈希表中所有的值都是0,则这两个字符串就互为变位词。
3.参考代码
//求字符串的大小,不包括结束符
int StrLength(char* str)
{
int sum = 0;
for(;*str!='\0';++str)
{
sum++;
}
return sum;
}
//互为变位词的判断
bool IsAnagram(char* str1, char* str2)
{
if(str1 ==NULL || str2 == NULL || StrLength(str1)!=StrLength(str2))
return false;
//定义一个数组哈希表
int table[26]={0};
//扫描第一个字符串,记录出现字母的次数+1
for(;*str1!='\0';++str1)
{
table[*str1-97]++;
}
//扫描第二个字符串,记录出现字母的次数-1
for(;*str2!='\0';++str2)
{
table[*str2-97]--;
}
//最后判断哈希表中元素是否都等于0
for(int i=0;i<26;i++)
{
if(table[i] != 0)
{
return false;
}
}
return true;
}