首页 > 编程语言 >P8195 [传智杯 #4 决赛] 小智的疑惑 ----- 字符串匹配、KMP算法优化next数组

P8195 [传智杯 #4 决赛] 小智的疑惑 ----- 字符串匹配、KMP算法优化next数组

时间:2022-11-20 20:01:56浏览次数:42  
标签:传智杯 ss next int ----- KMP 字符串 now

题目描述

传智专修学院给了小智一个仅包含小写字母的字符串 ss,他想知道,里面出现了多少次子串 chuanzhi 呢。

我们称一个字符串 tt 是 ss 的子串,当且仅当将 ss 的开头若干个(可以为 0 个)连续字符和结尾若干个(可以为 0 个)连续字符删去后,剩下的字符串和 tt 相同。例如,我们称 ab 是 abc 的子串,但 ac 不是 abc 的子串。

输入格式

输入只有一行一个字符串,表示字符串 ss。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1
welcometochuanzhicupchuanzhi
输出 #1
2

说明/提示

数据规模与约定

对于全部的测试点,保证 1 \leq |s| \leq 4 \times 10^51≤∣s∣≤4×105,|s|∣s∣ 表示 ss 的长度,且 ss 中只有小写字母。

KMP算法(虽然本题字符串为题目给出 所以并没有效果)

#include <iostream>
#include <string>
#include <vector>

using namespace std;
int main(){
    vector<int> next;
    string s;
    string cz = "chuanzhi";
    cin >> s;
    int n, m;
    int count = 0;
    n = s.size();
    m = cz.size();

    int x = 1;
    int now = 0;

    next.push_back(0);
    while (x < m) {
        if (cz[now] == cz[x]) {
            now++;
            x++;
            next.push_back(now);
        }
        else if (now) now = next[now - 1];
        else next.push_back(0), x++;
    }

    /*while (m--) {
        cout << next[m] << " / ";
    }*/

    int i = 0, j = 0;
    while (i < n) {
        if (s[i] == cz[j]) {
            i++;
            j++;
        }
        else if (j) j = next[j-1];
        else {
            i++;
        }
        if (j == 7) {
            count++;
            j = next[j-1];
        }
    }
    cout << count;
}

 

博主的KMP详解连接:

标签:传智杯,ss,next,int,-----,KMP,字符串,now
From: https://www.cnblogs.com/slowlydance2me/p/16909343.html

相关文章

  • HDLBits-Mt2015_q4问题
    知识点无第一次回答moduletop_module(inputx,inputy,outputz);wireaz1,az2,bz1,bz2;AIA1(.x(x),.y(y),.z(az1));AIA2(.x(x),.y......
  • K8s---【KubeSphere部署nacos集群】
    KubeSphere部署nacos集群1.准备nacos配置文件下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3注意:下载的是nacos-server-2.0.3.zip,而不是nacos。解压后......
  • 2022-2023-1 20221309《计算机基础与程序设计》第十二周学习总结
    作业信息这个作业属于哪个课程<班级的链接>这个作业要求在哪里<作业要求的链接> 这个作业的目标《C语言程序设计》第十一章https://www.cnblogs.......
  • Docker-网络模式
    1.docker-网络模式网络模式简介bridge为每一个容器分配、设置IP等、并将容器连接到一个docker0中、这个叫虚拟网桥,默认为该模式host容器将不会虚拟出自己......
  • Ajax---EventLoop事件循环
    前言    JavaScript是一门单线程执行的脚本语言。也就是说,同一时间只能做一件事情。    JavaScript要运行在宿主环境中(浏览器,nodejs)下。浏览器内部有执行j......
  • k8s源码分析3-kubectl命令行设置7大命令分组
    本节重点总结:设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端用cmd工厂函数f创建7大分组命令,如下基础初级命令BasicCommands(Beginner):基础中级命......
  • P7163 [COCI2020-2021#2] Svjetlo
    题意给你一棵点权是\(0/1\)的树,你可以从任意一点开始,走到任意一点结束,每到达一个点,都要翻转当前的点权。给定初始的点权,求使得整棵树的点权都变成\(1\)的最短路径长度......
  • MIFARE Plus-X和MIFARE Plus-S的区别
    MIFAREPlus-X和MIFAREPlus-S的区别mingdu.zhengatgmaildotcomMIFAREPlus-X和MIFAREPlus-S的特性特性MIFAREPlus-XMIFAREPlus-SSL2支持不支持SL3值操作支持不支持S......
  • 2022-2023-1 20221329 《计算机基础和程序设计》第十二周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12作业目标:学习《C语言程序设计》第11章......
  • Go-netpoll
    Go-Netpoller模型Gonetpoll核心Gonetpoll通过在底层对epoll/kqueue/iocp的封装,从而实现了使用同步编程模式达到异步执行的效果。总结来说,所有的网络操作都以网络......