【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】

头歌实训:利用kmp算法求子串在主串中不重叠出现的次数

文章目录

任务描述

本关任务:编写一个程序,利用kmp算法求子串在主串中不重叠出现的次数。

实验目的:深入掌握KMP算法的应用。

实验内容:编写一个程序,利用KMP算法求子串t在主串s中出现的次数,例如:s="aabbdaabbde",t="aabbd",t在s中出现2次;再例如:s="aaaaa",t="aa",t在s中出现2次。

实验工具:本关提供顺序串SqString的基本运算及其实现(在头文件sqstring.h中);您也可以直接使用C++ STL提供的string容器。

编程要求

根据提示,在右侧编辑器补充完成代码,计算并输出字符串t在字符串s中不重叠出现的次数。

测试说明

平台会对你编写的代码进行测试:

输入格式

输入包括2行。

第一行为字符串s,长度不超过106。

第二行为字符串t,长度不超过106。

输出格式

在一行中输出t在s中出现的次数。

样例输入1

aaaaa

aa

样例输出1

2

样例输入2

aabbdaabbde

aabbd

样例输出2

2

开始你的任务吧,祝你成功!

源代码:

cpp 复制代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>       //C++ STL之string容器
using namespace std;

#include "sqstring.h" //包含顺序串SqString基本运算算法

//利用KMP算法求t在s中出现的次数
int Count(string s, string t); 

//利用KMP算法求t在s中出现的次数
//int Count(char* s, char* t); 

//利用KMP算法求t在s中出现的次数
//int Count(SqString s, SqString t); 

/**
 * 说明:任选上面三个函数中的一个进行实现。
 */

//请在下面编写代码
int main()
{
    string s, t;
    cin >> s >> t;
    //cout << s << " " << t << endl;
    int cnt = Count(s, t);
    cout << cnt << endl;
    return 0;
}

int Count(string s, string t)
{
    int next[t.length()], j = 0, k = -1, i, cnt = 0; //next数组用于遍历时字符串t的下标回溯,j用于遍历字符串t,i用于便利字符串s,k用于给next数组赋值,cnt用于记录子字符串出现的次数
    next[0] = -1;   //将第一个next数组的下标置为-1
    while(j < t.length() - 1)   //获得next数组
    {
        if(k == -1 || t[j] == t[k])
        {
            j++;k++;
            next[j] = k;
        }
        else
        {
            k = next[k];
        }
    }
    i = j = 0;  //初始化两个下标
    while(i < s.length())   //通过while循环获得出现次数
    {
        if(j == -1 || s[i] == t[j])
        {
            i++;j++;
        }
        else
        {
            j = next[j];
        }
        if(j == t.length()) //当匹配成功时计数器++并且回溯j到0
        {
            cnt++;
            j = 0;
        }
    }
    return cnt; //返回出现次数
}
相关推荐
牧羊人.33337 分钟前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
揽星河..1 小时前
【C语言】指针
c语言·开发语言
小郎君6581 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7772 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚2 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真2 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务2 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√2 小时前
httpserver_QNetWorkClient
算法
Evand J2 小时前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计
货拉拉技术2 小时前
记忆即智能:重构对话式AI Agent认知基座的四层渐进式记忆与自进化系统
人工智能·算法