📄 kmp.cpp
字号:
#include<iostream.h>
#include<string.h>
#include"interface.h"
void fail(char *pattern, int len_pat,int f[])
{
f[0] = -1;
for(int j=1;j<len_pat;j++)
{
int i=f[j-1];
while(*(pattern+j) != *(pattern+i+1) && i >= 0)
i=f[i];
if(*(pattern+j) == *(pattern+i+1))
f[j] = i+1;
else f[j] = -1;
}
}
int KMP(char *target,int len_targ,char *pattern,int len_pat,int *f)
{
int posP = 0,posT = 0;
fail(pattern,len_pat,f);
while(posP < len_pat && posT < len_targ)
if(pattern[posP] == target[posT])
{
posP++;
posT++;
}
else if(posP == 0)
posT++;
else
posP = f[posP-1]+1;
if(posP < len_pat)
return -1;
else
return posT-len_pat;
}
void testKMP(char *a,char* b)
{
int result;
int *f;
f = new int[strlen(b)];
result = KMP(a,strlen(a),b,strlen(b),f);
// cout<<"Pattern Matching:\n";
// cout<<a<<endl<<b<<endl;
if(result>-1)
{
cout<<"The KMP result is:"<<result<<endl;
cout<<"After Matching:\n";
cout<<a<<endl;
for(int i=0;i<result;i++)
cout<<" ";
cout<<b<<endl;
}
delete f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -