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

      ❀完结撒花❀

  • 相关阅读:
    十步完全理解 SQL
    Oracle VM Virtual
    Pycharm 使用
    Open Yale course:Listening to Music
    SQL 必知必会
    安装 SQL server 2008 R2
    Ubuntu安装mysql之后,编译找不到头文件
    core dump文件的生成
    Linux静态库与动态库制作过程
    GEC6818连接Ubuntu,下载程序至开发板
  • 原文地址:https://www.cnblogs.com/fuhuayongyuandeshen/p/14364039.html
Copyright © 2011-2022 走看看