zoukankan      html  css  js  c++  java
  • HDU 2087  KMP模板题

    1、HDU 2087  

    2、题意:一个主串,一个子串,求子串在主串里出现了几次。

    3、总结:看了题解,还是不太懂。。

    //#include<iostream>#include<cmath>#include<queue>#include<algorithm>    //不明白为什么加上这些头文件就Compilation Error
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define F(i,a,b)  for (int i=a;i<b;i++)
    #define FF(i,a,b) for (int i=a;i<=b;i++)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N = 1010;
    
    char a[N],b[N];
    int next[N],lena,lenb;
    
    void getnext()    //这里还是看不明白 
    {
        int i=0,k=-1;
        next[0]=-1;
        while(i<lenb) 
        {
            if(k==-1||b[i]==b[k]) {
                i++;  k++;
                next[i]=k;
            } else  k=next[k];
        }
    }
    
    int KMP()
    {
        getnext();
        int i=0,j=0,cnt=0;
        while(i<lena) 
        {
            if(j==-1||a[i]==b[j]) {
                i++; j++;
            } else {
                j=next[j];
            }
            if(j==lenb) {
                cnt++; j=0;        //若两个不同的匹配没有交集则j=0,若存在交集则j=next[j]; 
            }
        }
        return cnt;
    }
    
    int main()
    {
        while(~scanf("%s",a) && a[0]!='#') 
        {
            scanf("%s",b);
            lena=strlen(a);
            lenb=strlen(b);
            printf("%d
    ",KMP());
            
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    简单工厂模式_C#_设计模式
    单例模式_C#设计模式
    快速排序_排序算法_算法
    关于缓存C#
    网络编程的4种IO模型
    一些自己总结
    驱动漏洞中的__try和ProbeForRead
    poj2318
    poj1113
    poj 1904
  • 原文地址:https://www.cnblogs.com/sbfhy/p/6055646.html
Copyright © 2011-2022 走看看