美文网首页
算法模板(八)字符串相关

算法模板(八)字符串相关

作者: 影踪派熊猫人武僧 | 来源:发表于2018-11-08 20:48 被阅读0次

    KMP

    #include<bits/stdc++.h>
    #define maxn 1000006
    using namespace std;
    int next[maxn];
    inline void getnext(char *p){
        next[0]=-1;
        int m=strlen(p);
        for(register int i=1;i<m;i++){      
            int j=next[i-1];        
            while(j>=0 && p[i]!=p[j+1])j=next[j];
            if(p[i]==p[j+1])j++;
            next[i]=j;
        }
    }
    inline int kmp(char *s,char *t){    
            int n=strlen(s),m=strlen(t);
        int j=-1;
        for(register inti=0;i<n;i++){
            while(j>=0 && s[i]!=t[j+1])j=next[j];
            if(s[i]==t[j+1]){
                j++;
            if(j+1==m)return i-m+1;
            }
        }
        return -1;
    }
    int main(){
        //freopen("1.txt","r",stdin);ios::sync_with_stdio(false);
        cin.tie(0);
        char s[maxn],t[maxn];
        cin>>s>>t;
        if(strlen(s)<strlen(t))swap(s,t);
        getnext(t);
        int now=kmp(s,t);
        while(now!=-1){
            cout<<now+1<<endl;
            for(register int i=0;i<=now;i++)s[i]=' ';
            now=kmp(s,t);
        }
        for(register int i=0;i<strlen(t);i++)cout<<next[i]+1<<" ";
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:算法模板(八)字符串相关

          本文链接:https://www.haomeiwen.com/subject/aujwxqtx.html