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

P3375 【模板】KMP字符串匹配

题目描述

如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。

输入输出格式

输入格式:
第一行为一个字符串,即为s1
第二行为一个字符串,即为s2
输出格式:
若干行,每行包含一个整数,表示s2在s1中出现的位置
接下来1行,包括length(s2)个整数,表示前缀数组next[i]的值。

p[i]存指针,指向字符串失配后再次匹配的位置

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000+100;
int p[maxn];
char a[maxn],b[maxn];
int n,m;
void pre()//求p[i]相当于对自己串求kmp
{
    p[1]=0;
    int j=0;
    for(int i=1;i<m;i++)
      {
      while(j>0&&b[j+1]!=b[i+1])j=p[j];
      if(b[j+1]==b[i+1])++j;
      p[i+1]=j;
      }
      
}
void kmp()
{
    int j=0;
    for(int i=0;i<n;i++)
    {
        while(j>0&&a[i+1]!=b[j+1])j=p[j];
        if(a[i+1]==b[j+1])++j;
        if(j==m)
        {
            printf("%d\n",i+2-m);
            j=p[j];//继续匹配
        }
    }
}
int main()
{
    scanf("%s%s",a+1,b+1);
    n=strlen(a+1),m=strlen(b+1);
    pre();
    kmp();
    for(int i=1;i<=m;i++)
    printf("%d ",p[i]);
    return 0;
}

转载于:https://www.cnblogs.com/DriverBen/p/10536032.html

相关文章:

  • C++11并发——多线程std::thread (一)
  • unity下贴图混合(Texture Blending)
  • elasticsearch中ik词库配置远程热加载
  • OL4加载geowebcache 部署的离线切片
  • 在Net MVC中应用JsTree
  • nginx代理tcp协议连接mysql
  • markdown操作手册
  • [转载]URI 源码分析
  • HTML之常用标签及属性
  • jmeter 常见问题汇总
  • SPOJ COT3.Combat on a tree(博弈论 Trie合并)
  • HDU 2883 kebab
  • C++学习笔记30,指针的引用(2)
  • fatal error C1010: 在查找预编译头时遇到意外的文件结尾
  • c# Winform dev控件之ChartControl
  • 分享一款快速APP功能测试工具
  • 10个最佳ES6特性 ES7与ES8的特性
  • 230. Kth Smallest Element in a BST
  • CentOS6 编译安装 redis-3.2.3
  • JS实现简单的MVC模式开发小游戏
  • KMP算法及优化
  • MySQL QA
  • PAT A1050
  • php的插入排序,通过双层for循环
  • React16时代,该用什么姿势写 React ?
  • text-decoration与color属性
  • 对象管理器(defineProperty)学习笔记
  • 分享几个不错的工具
  • 官方解决所有 npm 全局安装权限问题
  • 讲清楚之javascript作用域
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 异常机制详解
  • 通过调用文摘列表API获取文摘
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​Spring Boot 分片上传文件
  • ​水经微图Web1.5.0版即将上线
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #QT(智能家居界面-界面切换)
  • (1)虚拟机的安装与使用,linux系统安装
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (七)理解angular中的module和injector,即依赖注入
  • (三)docker:Dockerfile构建容器运行jar包
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net core 6 集成和使用 mongodb
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net6+aspose.words导出word并转pdf
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net经典笔试题
  • .NET中 MVC 工厂模式浅析
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @requestBody写与不写的情况