数据结构——字符串匹配KMP

news/2025/2/22 4:04:28

首先明确几个概念:

s[ ]: 主串

p[ ]: 模式串(用于匹配)

next[ j ]:以p[ j ]结尾的p字符串的前后缀最大匹配值,也是当p[ j+1 ]与s[ i ]不匹配时,j指针移动的下一位置。(需要预处理出来)

AcWing - 算法基础课

代码如下:

#include<iostream>

using namespace std;

const int N = 100100,M = 1000100;

char s[M],p[N];

int ne[N];

int main()
{
    int n,m;
    cin >> n >> p+1 >> m >> s+1;
    
    //求next数组
    /*
    求next数组和匹配过程类似
    因为next[i]是以i结尾的(包括i)字符串的最大前后缀匹配值
    然后这个过程相当于p串是前缀匹配,s串是后缀匹配,在每一个位置进行遍历
    */
    for(int i=2,j=0;i<=n;i++)//i=2开始是因为next[1]=0;
    {
        while(j&&p[i]!=p[j+1])j=ne[j];
        if(p[i]==p[j+1])j++;//这里是两个p串
        ne[i]=j;
    }
    
    //kmp
    for(int i=1,j=0;i<=m;i++)
    {
        while(j&&s[i]!=p[j+1])j=ne[j];
        if(s[i]==p[j+1])j++;
        if(j==n)
        {
            //匹配上了一个输出开头下标
            cout<<i-n<<" ";
            j=ne[j];
        }
    }
    return 0;
}


http://www.niftyadmin.cn/n/5861577.html

相关文章

BS架构网络安全 网络安全架构分析

文章目录 Web架构安全分析 一、web工作机制 1. 简述用户访问一个网站的完整路径2. web系统结构 二、url 1. 概述2. 完整格式3. url编码 三、HTTP 1. request请求报文2. http请求方法3. response响应报文 三、同源策略 1. 概述2. 同源策略的条件3. 非同源受到的限制4. …

vue2和vue3的按需引入的详细对比通俗易懂

以下是 Vue2 与 Vue3 按需引入的对比详解&#xff0c;用最简单的语言和场景说明差异&#xff1a; 一、按需引入的本质 目标&#xff1a;只打包项目中实际用到的代码&#xff08;组件、API&#xff09;&#xff0c;减少最终文件体积。类比&#xff1a;去餐厅点餐&#xff0c;只…

从面试中的“漏掉步骤”谈自我表达与思维方式的转变

在今天的面试中&#xff0c;我遇到了一个让我深刻反思自己思维方式的问题。当面试官问到如何应对用户量和请求量逐渐增加时&#xff0c;我的回答遗漏了一些基础步骤&#xff0c;导致我给出了“我暂时想不出更好的反思”的回答。这一经历让我意识到&#xff0c;在面对问题时&…

纯手工搭建整套CI/CD流水线指南

目录 一、前言 二、环境准备 1、服务器开荒&#xff08;192.168.1.200&#xff09; 2、离线资源清单&#xff08;提前用U盘拷好&#xff09; 三、硬核安装&#xff1a;比拧螺丝还细的步骤 Step1&#xff1a;搭建GitLab&#xff08;注意&#xff01;这是只内存饕餮&#xf…

深入理解 SQL 注入漏洞及解决方案

一、引言 在当今数字化时代&#xff0c;数据库作为存储和管理数据的核心组件&#xff0c;其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞&#xff0c;它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…

MacOS Docker 安装指南

MacOS Docker 安装指南 引言 Docker 是一个开源的应用容器引擎,它允许您将应用程序与基础设施分开,以此快速交付软件。Docker 的核心思想是将应用程序及其依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。本文将为您详细介绍如何在 M…

ollama修改监听ip: 0.0.0.0

确认Ollama绑定IP地址 默认情况下&#xff0c;Ollama可能仅监听本地回环地址&#xff08;127.0.0.1&#xff09;。要允许外部访问&#xff0c;需将其配置为监听所有IP&#xff08;0.0.0.0&#xff09;或指定IP&#xff08;如10…19&#xff09;。 修改启动命令&#xff08;推荐…

使用Dify将AI机器人嵌入到你的前端页面中及chrome的扩展应用

目录 1 博主有话说2 前提环境3 Dify创建个聊天助手应用4 将AI聊天机器人嵌入到html中5 将AI聊天机器人设置为chrome的扩展应用6 博主增语 1 博主有话说 那博主话不多说&#xff0c;先展示一下成果&#xff01; 这个界面是使用dify配置的一个“聊天助手”的应用&#xff0c;助…