zoukankan      html  css  js  c++  java
  • KMP 模板

    #include <cstdio>
    #include <cstring>
    #include <cctype>
    #include <cmath>
    #include <set>
    #include <map>
    #include <list>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <string>
    #include <bitset>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    
    using namespace std;
    typedef long long LL;
    const int INF=2e9+1e8;
    const int MOD=1e9+7;
    const int MAX_SIZE=1005;
    
    void set_kmp_next(int *kmp_next,int len,string& b)
    {
        int i=0,j=-1;
        kmp_next[0]=-1;
        while(i<len)
        {
            if(j==-1||b[i]==b[j])
            {
                i++;
                j++;
                kmp_next[i]=j;
            }
            else
                j=kmp_next[j];
        }
    }
    int kmp(string &a,string& b)  // a 为原串  ,b 为模式串
    {
        int i,j,lena=a.size(),lenb=b.size();
        int kmp_next[MAX_SIZE];
        set_kmp_next(kmp_next,lenb,b);
        i=j=0;
        while(i<lena)
        {
            if(j==-1||a[i]==b[j])
            {
                i++;
                j++;
            }
            else
                j=kmp_next[j];
            if(j==lenb)
                return i-j+1;
        }
        return -1;
    }
    int main()
    {
        string a,b;
        while(cin>>a>>b)
        {
            cout<<kmp(a,b)<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    浅读《构建之法》
    def 和 lamdba的区别
    Numpy和Pandas的区别
    Django:每点击一次就增加行可输入的表格
    F函数和Q函数的作用
    super()的用法
    liunx操作系统
    celery(超详细)
    celery
    FastDFS环境搭建
  • 原文地址:https://www.cnblogs.com/coded-ream/p/7207986.html
Copyright © 2011-2022 走看看