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
  • 相关阅读:
    团队冲刺第一天
    第八周进度报告
    团队会议01
    《梦断代码》阅读笔记(三)
    《梦断代码》阅读笔记(二)
    《梦断代码》阅读笔记(一)
    SCRUM第六天
    SCRUM第五天
    大白话strom——问题收集(持续更新ing)
    maven环境快速搭建(转)
  • 原文地址:https://www.cnblogs.com/sbfhy/p/6055646.html
Copyright © 2011-2022 走看看