📄 kmp.cpp
字号:
#include<string.h>
int f[200];
void swap(char *s1,char *s2){
char temp[110];
strcpy(temp,s1);
strcpy(s1,s2);
strcpy(s2,temp);
return;
}
int kmp(char p[],char tag[],int len){
int posp=0,post=0;
int lengthp=len,lengtht=strlen(tag);
while(posp<lengthp&&post<lengtht){
if(p[posp]==tag[post]){
posp++;
post++;
}
else if(posp==0) post++;
else posp=f[posp-1]+1;
}
if(posp<lengthp) return -1;
else return post-lengthp;
}
void fail(char p[],int len){
int lengthp=len;
f[0]=-1;
for(int j=1;j<lengthp;j++){
int i=f[j-1];
while(p[j]!=p[i+1]&&i>=0) i=f[i];
if(p[j]==p[i+1]) f[j]=i+1;
else f[j]=-1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -