zoukankan      html  css  js  c++  java
  • HDU2087【KMP-next】

    思路:

    利用next[]的转化。

    //#include <bits/stdc++.h>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int N=1e3+10;
    char p[N],s[N];
    int lenp,lens,Next[N];
    
    void GetNext(){
        int i=0,j=-1;
        Next[0]=-1;
        while(i<lenp)
        {
            if(j==-1||p[i]==p[j])
                Next[++i]=++j;
            else
                j=Next[j];
        }
    }
    
    int KMP()
    {
        int i=0,j=0,ans=0;
        while(i<lens)
        {
            if(j==-1||s[i]==p[j])
            {
                i++;
                j++;
                if(j==lenp)
                {
                    ans++;
                    j=0;
                }
            }
            else
                j=Next[j];
        }
        return ans;
    }
    
    int main()
    {
        while(scanf("%s",s))
        {
            if(strcmp(s,"#")==0) break;
            scanf("%s",p);
            lens=strlen(s);
            lenp=strlen(p);
            GetNext();
            printf("%d
    ",KMP());
        }
        return 0;
    }
    
    


  • 相关阅读:
    9-15
    9-5
    8-26
    8-24
    7-20
    7-17
    我离职后要干些什么
    6-18
    5-28
    5-20
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777437.html
Copyright © 2011-2022 走看看