HDU2087字符串匹配(KMP算法)
http://acm.hdu.edu.cn/showproblem.php?pid=2087
题意:给一个主串,一个模板串,问最多有多少个。
用KMP算法,当然也能用一般方法,还能用库函数,这里给出KMP算法代码,其中函数可以当做模板,苦逼的我第一次学KMP的时候,看的解题报告竟然是错的!!!!白耗了一个下午。。。。但童鞋们请相信,我的一定是AC的!!!!!错代码害死人啊。。。。。
KMP算法AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s1[1010],s2[1010]; int next[1010],l1,l2; void getnext() { int i=0,j=-1; next[0]=-1; while(i<l2) { if(j==-1||s2[i]==s2[j])//此处是模板串内部比较 { i++,j++; next[i]=j; } else j=next[j]; } } int kmp() { int i=0,j=0,sum=0; while(i<l1) { if(j==-1||s1[i]==s2[j]) i++,j++; else j=next[j]; if(j==l2) { sum++; j=next[j]+j; } } return sum; } int main() { while(scanf("%s",&s1)!=EOF) { if(s1[0]=='#')break; scanf("%s",&s2); l1=strlen(s1); l2=strlen(s2); getnext(); printf("%d\n",kmp()); } return 0; }

浙公网安备 33010602011771号