KMP算法 KMP模式匹配 二(串)
2014-07-29 09:00
197 查看
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
Sample Output
今早晨看了一遍才算真正看懂了代码。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;
}
else
k=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模式匹配 二(串)
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;
}
else
k=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模式匹配 一(串)
- KMP算法 KMP模式匹配 一(串)
- 计算KMP模式匹配算法中next数组的代码分析及改进型KMP算法中nextval数组代码分析
- 字符串普通模式匹配和KMP模式匹配[面相对象喽]
- 关于KMP模式匹配的理解
- 串的模式匹配算法(非kmp)
- KMP字符串模式匹配的C实现
- KMP字符串模式匹配详解
- KMP字符串模式匹配详解
- KMP字符串模式匹配详解
- 模式匹配的KMP算法详解
- KMP 字符串模式匹配详解
- 模式匹配的KMP算法详解
- KMP字符串模式匹配详解
- KMP字符串模式匹配详解
- kmp 模式匹配。。。。
- KMP字符串模式匹配详解
- 模式匹配-KMP算法
- c/c++程序之_KMP字符串模式匹配详解
- KMP字符串模式匹配详解