所谓变位词是指把某个单词的字母的位置(顺序)加以改换所形成的一个新词,即两个单词中出现的字母相同,并且每个字母出现的次数也相同。例如:silent 是 listen 的一个变位词,integral 是 triangle 的一个变位词。
题目 1
在英语中,如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,那么这两个单词互为变位词。请完成一个函数,判断输入的两个字符串是不是互为变位词。
思路:
一个数组保存字符出现的次数。我们可以开一个大小是 256 的整数数组,遍历第一个字符串,将相应的字符出现的次数加1;遍历第二个字符串时,将相应出现的次数减 1。最后如果数组中 256 个数都是 0,说明两个字符串是一对变位词。(第一个字符串出现的字符都被第二个字符串出现的字符抵消了)。如果有一个不为0则不是变位词。
#include <stdio.h>
#include <stdlib.h>
int is_anagram(char *a, char *b)
{
if(a==NULL || b==NULL)
return 0;
if(strlen(a)!=strlen(b))//如果长度不等,则不为变位词
return 0;
char hash_table[256] = {0};//创建简单哈希数组,下标为字符的ASCII码,数组值是字符出现的次数
char *p = a;
while(*p != '\0')
/**