1、HDU 2087
2、题意:一个主串,一个子串,求子串在主串里出现了几次。
3、总结:看了题解,还是不太懂。。
//#include<iostream>#include<cmath>#include<queue>#include<algorithm> //不明白为什么加上这些头文件就Compilation Error #include<cstring> #include<cstdio> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f typedef long long ll; const int N = 1010; char a[N],b[N]; int next[N],lena,lenb; void getnext() //这里还是看不明白 { int i=0,k=-1; next[0]=-1; while(i<lenb) { if(k==-1||b[i]==b[k]) { i++; k++; next[i]=k; } else k=next[k]; } } int KMP() { getnext(); int i=0,j=0,cnt=0; while(i<lena) { if(j==-1||a[i]==b[j]) { i++; j++; } else { j=next[j]; } if(j==lenb) { cnt++; j=0; //若两个不同的匹配没有交集则j=0,若存在交集则j=next[j]; } } return cnt; } int main() { while(~scanf("%s",a) && a[0]!='#') { scanf("%s",b); lena=strlen(a); lenb=strlen(b); printf("%d\n",KMP()); } return 0; }
本文介绍了一种高效的字符串匹配算法——KMP算法,并通过一个具体的编程实例详细展示了该算法的工作原理及实现过程。文章首先定义了问题背景,即在一个主串中查找子串出现的次数,然后给出了C++代码实现,包括如何构建next数组和进行KMP匹配。
318

被折叠的 条评论
为什么被折叠?



