kmp求助
  • 板块学术版
  • 楼主lccve
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/22 17:34
  • 上次更新2023/11/3 08:14:00
查看原帖
kmp求助
525302
lccve楼主2023/7/22 17:34

kmp字符串匹配

#include<bits/stdc++.h>
using namespace std;
string t,p;
int next_bool[1000001];
int next_ycl(int mode)
{
    next_bool[1]=0;
    int i=1;
    int j=0;
    while(i<mode)
    {
        if(p[i]==p[j])
            next_bool[++i]=++j;
        else if(j==0)
            next_bool[++i]=j;
        else{
            j=next_bool[j+1];
        }
    }
}
void kmp(int modet,int modep){
    int i=0,j=0;
    while(i<modet)
    {
        if(t[i]==p[j])
        {
            i++;
            j++;
        }
        else if(j==0) i+=1;
        else
        {
            if((i+modep-j)>=modet) return;
            else j=next_bool[j+1];
        }
        if(j==modep){
             cout<<i-j+1<<endl;
             j=0;
             i=i-modep+2;   
        }
    }
}
int main(){
    cin>>t>>p;
    next_ycl(p.size());
    kmp(t.size(),p.size());
    for(int i=1;i<=p.size();i++)
        cout<<next_bool[i]<<" ";
}

做出来不是re 就是 tle,但是我真不知道哪里内存爆了,就是最简单的数据也会爆。自己尝试用string 写出来的与题解都不一样,真的很痛苦

2023/7/22 17:34
加载中...