KMP匹配问题
基础知识:双指针+next前缀和数组
最大匹配=最小移动
kmp匹配过程 思路
实现代码
//KMP匹配问题
//查询的字符串从下标为1开始接收 字串从0 便于求前缀和
for(int i=1,j=0;i<=m;i++)
{ //当j不指向子串起点时
while(j&&s[i]!=p[j+1])j=ne[j];
if(s[i]==s[j+1])j++;
if(j==n)
{
//匹配成功
}
!!!求next数组 前缀和
相当与自己与自己进行kmp匹配的过程
//KMP匹配问题
//查询的字符串从下标为1开始接收 字串从0 便于求前缀和
for(int i=2,j=0;i<=m;i++)
{ //当j不指向子串起点时
while(j&&s[i]!=p[j+1])j=ne[j];
if(s[i]==s[j+1])j++;
ne[i]=j;
}