zoukankan      html  css  js  c++  java
  • KMP

    AB串下标都从1开始,kmp函数返回第一次成功匹配的A串下标,把其中注释去掉可以匹配多个

    Next[i]表示位置长度为1-i的字符串最多有长度为Next[i]的前缀等于其后缀

    char A[1000005],B[1000005] ;
    int Next[1000005],lenA,lenB ;
    void GetNext()
    {
        int i,j ;
        Next[1]=j=0 ;  
        for(i=2 ;i<=lenB ;i++)
        {
            while(j>0 && (B[j+1]!=B[i]))j=Next[j] ;
            if(B[j+1]==B[i])j++ ;
            Next[i]=j ;
        }
    }
    int kmp()
    {
        int i,j ;
        j=0 ;
        for(i=1 ;i<=lenA ;i++)
        {
            while(j>0 && (B[j+1]!=A[i]))j=Next[j] ;
            if(B[j+1]==A[i])j++ ;
            if(j==lenB)
            {
                return i-lenB+1 ;
                //j=Next[j] ;
            }
        }
        return -1 ;
    }
    View Code
  • 相关阅读:
    403
    311
    401
    310
    308
    309
    307
    304
    3-1
    2-11
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2526188.html
Copyright © 2011-2022 走看看