本文主要是介绍hdu2087(kmp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:点击打开链接
题意:给出串S和T,求S中含有多少串T,T不能重叠
代码:
#include <map>
#include <set>
#include <queue>
#include <string>
#include <math.h>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int siz=1005;
int nex[siz];
char S[siz],T[siz];
void getnex(int len){int i,j;j=-1,i=0;nex[0]=-1;while(i<len){if(j==-1||T[i]==T[j])nex[++i]=++j;elsej=nex[j];}
}
int kmp(int slen,int tlen){int i,j,ans;i=j=ans=0;getnex(tlen);while(i<slen){if(j==-1||S[i]==T[j])i++,j++;elsej=nex[j];if(j==tlen){ //找到一个就重置jans++;j=0;}}return ans;
}
int main(){while(scanf("%s",S)!=EOF){if(strcmp(S,"#")==0)break;scanf("%s",T);printf("%d\n",kmp(strlen(S),strlen(T)));}return 0;
}
这篇关于hdu2087(kmp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!