KMP算法:
乱入·简单的串匹配:
\n
\n
//一个求next[i]可能会做多次的while
//书上的方法:s[]下标从0算起,next[]从1算起,代码"巧妙",但难懂,我做的题少还感觉不到"巧"的威力
//我的方法:s[]下标从1算起,next[]从1算起,代码相似,我觉得比较好懂
// 书用的错位方法很多网友都用,我暂时承受不了!!!着急啊!!!
// 不同点:加的次序;
// n[x]理解为:当前串在前边出现的位置,当x!=1||x!=0时,n[]才等于最大重复前缀的长度,j与n[]密切配合
#include<stdio.h>
#include<string.h>
int main()
{
char s[50]="\0ababcabcacbab";
int n[50]={0},i,j,len;
len=strlen(s+1);
n[0]=-1;//Q:=-1? A:当s[0]!=s[i]时,能方便地配合j的调整
j=0; i=1;//j=0即未出现过
while (i<=len)
{
if (j==0) {n[i]=0;i++;j++;continue;}
if (s[i]==s[j]) {n[i]=j;i++;j++;}
if (s[i]!=s[j]) j=n[j-1]+1;
}
i=0;
return 0;
}
参考资料:http://blog.csdn.net/yutianzuijin/article/details/11954939
+一本算法入门书