当前位置: 首页 > news >正文

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

首先明确几个概念:

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;
}

相关文章:

  • Linux(ubuntu) GPU CUDA 构建Docker镜像
  • 【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门
  • Linux-C/C++《C/8、系统信息与系统资源》
  • 抓包工具是什么?
  • 深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)
  • Memcached和redis对比了解
  • Python—requests模块
  • excel导入Mysql中时间格式异常
  • 深度学习笔记—— GRU(Gated Recurrent Unit)
  • 【设计模式精讲】创建型模式之单例模式(饿汉式、懒汉式、双重校验、静态内部类、枚举)
  • Node IO操作
  • 【阮一峰】2.数组
  • vue3 input type=“file” 修改样式
  • 深入理解Zookeeper:分布式系统的协调者
  • 三、Three.js模型对象、材质
  • 网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施
  • 16Linux运维网络基础(02网络层次结构)
  • spring注解开发(纯注解开发模式)(2)
  • MobaXterm通过ssh远程连接Ubuntu的方法
  • 【重磅发布】OmniParser V2-开启GUI自动化新时代
  • 个人网站设计 优帮云/seo 是什么
  • VPS如何做镜像网站/seo搜索排名优化公司
  • 城乡建设管理局的网站/海会网络做的网站怎么做优化
  • 北京怎样做企业网站/百度免费
  • 个人备案的网站 做企业站/天眼查企业查询
  • 自己做的网站如何让百度收录/南宁百度seo推广