zoukankan      html  css  js  c++  java
  • 扩展kmp

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    char s[101],t[101];
    int ls,lt;
    int extend[101],next[101];
    void getnext()
    {
        int a=0;
        next[0]=lt;
        while(a<lt-1&&t[a]==t[a+1]) a++;
        next[1]=a;
        a=1;
        for(int k=2;k<lt;k++)
        {
            int p=a+next[a]-1;
            int l=next[k-a];//
            if(k-1+l>=p)//
            {
                int j=(p-k+1)>0 ? p-k+1 : 0;//
                while(k+j<lt&&t[k+j]==t[j]) j++;
                next[k]=j;
                a=k;
            }
            else next[k]=l;
        }
    }
    void exkmp()
    {
        int a=0;
        int minlen=ls<lt ? ls : lt;
        while(a<minlen&&s[a]==t[a]) a++;
        extend[0]=a;
        a=0;
        for(int k=1;k<ls;k++)
        {
            int p=a+extend[a]-1;
            int l=next[k-a];//
            if(k-1+l>=p)//
            {
                int j=(p-k+1)>0 ? p-k+1 : 0;
                while(k+j<ls&&j<lt&&s[k+j]==t[j]) j++;
                extend[k]=j;
                a=k;
            }
            else extend[k]=l;
         } 
    }
    int main()
    {
        while(cin>>s>>t)
        {
            ls=strlen(s);
            lt=strlen(t);
            getnext();
            exkmp();
            int maxn=0,k=-1;
            for(int i=0;i<ls;i++) printf("%d ",extend[i]);
        }
    }
  • 相关阅读:
    持久化类的三种状态
    Hibernate持久化类规则
    JSP之Bean
    JSP动作标签
    JSP九大内置对象
    Jsp指令
    JSTL标签语言
    JSP之EL表达式
    Java 中的 Characters
    汇编基本语法
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6285719.html
Copyright © 2011-2022 走看看