字符匹配面试题,两个字符串如果字符和长度都相等,则称这两个字符串匹配,如abcd和dcab。用函数实现,
对这样的问题我们可以考虑使用hash算法来实现,使用两个256个单元的hash数组,根据字符的ASCII作为hash数组的下标, 每个数组单元中记录字符出现的次数
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
bool Is_Mach(const char *str1 , const char *str2)
{
unsigned int hash1[256]={0};
unsigned int hash2[256]={0};
const char *p=str1;
assert(str1 !=NULL && str2!=NULL); //assert函数确保两个字符串都不为空
if(strlen(str1)!=strlen(str2))
return 0;
while(*str1)
{
hash1[*str1]++;
str1++;
}
while(*str2)
{
hash2[*str2]++;
str2++;
}
while(*p)
{
if(hash1[*p]!=hash2[*p])
return 0;
p++;
}
return 1;
}
int main()
{
char src1[] = "abcdfcgg";
char src2[] = "abcdfggc";
/* printf("%d/n", Is_Mach(src1, src2)); */
printf("%d/n", Is_Mach(src1, src2));
system("pause");
return 0;
}