本文主要是介绍KMP算法 KMP模式匹配 二(串),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
B - KMP模式匹配 二(串)
Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu
Description
输入一个主串和一个子串,用KMP进行匹配,问进行几趟匹配才成功,若没成功,则输出0
Input
输入一个主串和一个子串
Output
匹配的趟数
Sample Input
ababcabcacbab abcac
Sample Output
3
今早晨看了一遍才算真正看懂了代码。next数组的求值。。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int next[10005];
char str[10005];
int len;
void getnext(char *str,int next[])
{int j,k;next[1]=0;j=1;k=0;while(j<=len)if((k==0)||(str[j]==str[k])){++j;++k;next[j]=k;}elsek=next[k];
}int main()
{char s[1005];cin>>s;len =strlen(s);int j,k;for(j=1,k=0;k<len;j++,k++){str[j]=s[k];}int i;getnext(str,next);for(i=1;i<len;i++)cout<<next[i]<<" ";cout<<next[len]<<endl;return 0;
}
这篇关于KMP算法 KMP模式匹配 二(串)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!