BF算法
BF算法
设s和t是两个字符串,若t是s的子串,则返回t在s中的位置,否则返回0
int Index_BF(char s[],char t[])
{
//字符串s和t的第一个元素都设位置为0,与下标保持一致
int i=0,j=0;
//求字符串s和t的长度
int s_length=strlen(s);
int t_length=strlen(t);
//主串最多比较i次,每次匹配不成功后再次循环时子串最多比较j次
while(i<s_length&&j<t_length) //直接改成while(s[i]!='\0'&&t[j]!='\0'){}更简洁
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1; //每次比较不成功时,因为比较了j次,故i都要回退j步并再进1步
j=0;
}
}
//比较结束过后就要判断是否匹配成功
//匹配成功时,由于子串长度为t_length,故一定是比较了t_length次
if(j==t_length)
{
//比较成功时,由于比较了j次,故i要回退j步
return i-t_length; //或return i-j;
}
return -1;
}