zoukankan      html  css  js  c++  java
  • hdu-1686(kmp)

    题意:前面的都是废话。。。其实直接看输入要求和输出要求就可以了,就是给你两个字符串,问你第一个字符串在第二个字符串中出现几次;

    解题思路:kmp。。。

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #define M 10050
    #define N 1005000
    using namespace std;
    int next1[M];
    char s[N];
    char t[M];
    int slen,tlen;
    void  get_next()
    {
        int j=0,k=-1;
        next1[0]=-1;
        while(j<tlen)
        {
            if(k==-1||t[j]==t[k])
            {
                next1[++j]=++k;
            }
            else
                k=next1[k];
        }
    }
    int kmp_cnt()
    {
        int ans=0,i=0,j=0;
        if(slen==1&&tlen==1)
        {
            if(s[0]==t[0])
                return 1;
            else
                return 0;
        }
        get_next();
        for(int i=0;i<slen;i++)
        {
            while(j>0&&s[i]!=t[j])
                j=next1[j];
            if(s[i]==t[j])
                j++;
            if(j==tlen)
            {
                ans++;
                j=next1[j];
            }
        }
        return ans;
    }
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int tt;
        cin>>tt;
        while(tt--)
        {
            cin>>t;
            cin>>s;
            tlen=strlen(t);
            slen=strlen(s);
            cout<<kmp_cnt()<<endl;
        }
    }
    

      

  • 相关阅读:
    git的命令操作指南
    【flask】RestFul的基本鉴权
    linux断电修复
    centos7安装libreoffice
    java -jar 后台启动
    yum安装nginx
    rpm安装mysql
    yum安装redis
    Centos 修改yum源
    centos8安装node.js v12.18.3
  • 原文地址:https://www.cnblogs.com/huangdao/p/9281046.html
Copyright © 2011-2022 走看看