zoukankan      html  css  js  c++  java
  • hdu 2087

    题目链接


    STL+KMP


    #include <cstdio>
    #include <cstring>
    using namespace std;
    int main()
    {
        int i,len,sum;
        char *p;
        char a[3005],b[3005];
        while(scanf("%s",a)&&a[0]!='#')
        {
            scanf("%s",b);
            len=strlen(b);
            sum=0;
            for(i=0,p=a;p=strstr(p,b);p+=len)
            {
                sum++;
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    



    #include <cstdio>
    #include <cstring>
    #define MAXN 1000000
    using namespace std;
    char p[MAXN],s[MAXN]; //s 母串
    int next[MAXN];
    void get_next(char *P,int *next,int len1)
    {
        int j,k;
        j=0;k=-1;next[0]=-1;
        while(j<len1)
        {
            if(k==-1||p[j]==p[k])
            {
                j++;k++;
                next[j]=k;
            }
            else
            k=next[k];
        }
    }
    int kmp()
    {
        int i,j,k,len1,len2,t;
        i=0;j=0;k=0;
        len1=strlen(p);
        len2=strlen(s);
        get_next(p,next,len1);
        while(i<len2)
        {
            t=i;       //去掉为可重叠
            if(s[i]==p[j])
            { i++;j++; }
            else
            {
                if(j==-1)
                {i++;j=0;}
                else
                j=next[j];
            }
            if(j==len1)
            {k++;i=t+len1;} //可重叠为k++;
        }
            return k;
    }
    
    int main()
    {
        int n;
        while(scanf("%s",s)&&s[0]!='#')
        {
            scanf("%s",p);
            printf("%d
    ",kmp());
        }
        return 0;
    }
    



  • 相关阅读:
    sudo命令 sudoers文件
    sscanf函数
    printf格式化输出
    c文件操作
    string和char*
    c去除空格 小写转大写
    主机序和网络序转换
    ulimit用法
    mysql基础(附具体操作代码)
    ES6 class
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3263199.html
Copyright © 2011-2022 走看看