kmp板子
//next数组
int nex[M];
void next(string t)
{
//数组起始位置下标为1
for(int i = 2,j = 0; i <t.size();i++)
{
while(j && t[i] != t[j+1]) j = nex[j];
if(t[i ] == t[j+1]) j++;
nex[i] = j;
}
}
//字符串匹配匹配KMOPP
void Kmp(string s,string t)
{
int m = s.size(),n = t.size();
for(int i = 1 , j = 0; i <= m ;i ++)
{
while(j && s[i]!=t[j+1)) j = nex[j];
if(s[i] == t[j+1])
{
j++;
if(j == n)//完成一次匹配,输出母串对应的匹配成功的下标
{
cout << i - n +1 <<endl;
j = nex[j];//跳转开始下一次匹配
}
}
}
}