zoukankan      html  css  js  c++  java
  • KMP模板

    题目描述

    给定一个字符串 A 和一个字符串 B,求 B 在 A 中的出现次数。

    A 中不同位置出现的 B 可重叠,详见样例二、四。

    输入格式

    输入共两行,分别是字符串 A 和字符串 B。

    输出格式

    输出一个整数,表示 B 在 A 中的出现次数。

    样例数据

    input

    RachelAhhhh
    h

    output

    5

    input

    RachelAhhhh
    hh

    output

    3

    input

    RachelAhhhh
    hhh

    output

    2

    input

    zyzyzyz
    zyz

    output

    3

    数据规模与约定

    保证 1A,B1061≤A,B的长度≤106

    A ,B 仅包含大小写字母。

    时间限制:1s1s

    空间限制:256MB

    这道是个模板题,但关于KMP我会另开一个博客详细说(我尽力)。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+1;
    string a,b;
    int ans;
    int p[N];
    int main()
    {
        freopen("kmp.in","r",stdin);
        freopen("kmp.out","w",stdout);
        cin>>a>>b;
        p[0]=-1;
        int j=-1;
        for(int i=1;i<b.size();i++)
        {
            while(j>=0&&b[j+1]!=b[j])
                j=p[j];
            if(b[j+1]==b[i])
                j++;
            p[i]=j;
        }
        j=-1;
        for(int i=0;i<a.size();i++)
        {
            while(j>-1&&b[j+1]!=a[i])
                j=p[j];
            if(b[j+1]==a[i])
                j++;
            if(j==b.size()-1)
            {
                ans++;
                j=p[j];
            }
        }
        cout<<ans;
        return 0;
    }
    View Code

      ❀完结撒花❀

  • 相关阅读:
    C#调用易语言DLL
    Github无法访问的解决办法
    CMD命令下图片合成一句话木马命令
    IIS6的文件解析漏洞
    C#的委托
    C#的多线程简洁笔记
    POST注入之sqlmap
    分布式任务调度XXL-JOB初体验
    Ubuntu切换为阿里镜像源
    Ubuntu禁用root账号,开启Ubuntu密钥登录
  • 原文地址:https://www.cnblogs.com/fuhuayongyuandeshen/p/14364039.html
Copyright © 2011-2022 走看看