P3375 【模板】KMP字符串匹配

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: P3375 【模板】KMP字符串匹配

题目描述



给出两个字符串s1 和 s2,若 s1 的区间  [l,r] 子串与  s2 完全相同,则称  s2 在 s1 中出现了,其出现位置为  l。


现在请你求出 s2 在  s1 中所有出现的位置。


定义一个字符串 s  的 border 为 s  的一个非 s  本身的子串 t ,满足 t 既是 s  的前缀,又是  s 的后缀。


对于  s2,你还需要求出对于其每个前缀 s  的最长 border t 的长度。


输入格式



第一行为一个字符串,即为  s1。

第二行为一个字符串,即为 s2。


输出格式



首先输出若干行,每行一个整数,按从小到大的顺序输出  s2 在  s1 中出现的位置。

最后一行输出 ∣s2∣ 个整数,第  i 个整数表示 s2 的长度为 i 的前缀的最长 border 长度。


输入输出样例



输入  

ABABABC

ABA


输出  

1

3

0 0 1


题意分析就是让我们先找出第二的前后缀最长的公共子串,然后输出,最后利用这个找到第二个字符串在第一个字符串里面的位置,输出即可,kmp,这种思想要理解。具体思想看代码。


#include<bits/stdc++.h>
const int MAXN=1e7+10;
using namespace std;
int kmp[MAXN];
int la,lb,j; 
char a[MAXN],b[MAXN];
int main()
{
    cin>>a+1;//输入字符串s1 意思就是从下标1 
    cin>>b+1;//输入字符串s2 
    la=strlen(a+1);//长度相当于有几个字母注意 
    lb=strlen(b+1);
    for (int i=2;i<=lb;i++)//j控制kmp[j] 要小 
     {     
     while(j&&b[j+1]!=b[i])//j不为0且如果不相邻就跳到前一个前缀里面把j 
        j=kmp[j];    
       if(b[j+1]==b[i])//如果相等 
     j++;    
        kmp[i]=j;//前缀数 
       }
    j=0;
    for(int i=1;i<=la;i++)
     {
          while(j>0&&b[j+1]!=a[i])
           j=kmp[j];
          if (b[j+1]==a[i]) 
           j++;
          if (j==lb)
       {
      cout<<i-lb+1<<endl;
       j=kmp[j];//回溯把kmp的前缀拿出来 
       }
       }
    for (int i=1;i<=lb;i++)
    cout<<kmp[i]<<" ";//打印的是每个数的前缀 
}


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
算法 C++ 容器
c++迭代器介绍
C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。
235 0
|
3天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
13天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
509 203
|
5天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
730 157
|
11天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
5天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。