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

洛谷p4824 Censoring S

k m p + 栈 kmp+栈 kmp+
题目链接

题目大意

给定字符串 a , b a,b a,b,在 a a a中不断删除 b b b,直到 a a a中没有完整的字符串 b b b,输出最终操作之后的 a a a

思路

k m p kmp kmp a a a中匹配 b b b,用栈进行删除操作
进行 k m p kmp kmp时,把下标 i i i入栈,匹配成功时执行出栈操作,更新 j j j到当时 i i i能匹配到最大位置开始再 k m p kmp kmp

ACcode

#include<bits/stdc++.h>

using namespace std;

const int M = 1e6 + 9;
int pmt[M], f[M], stk[M];

void get_pmt(const string& s, const string& p) {
    for (int i = 1, j = 0;i < p.size();i++) {
        while (j && p[i] != p[j])j = pmt[j - 1];
        if (p[i] == p[j])j++;
        pmt[i] = j;
    }
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    string s, p;cin >> s >> p;
    get_pmt(s, p);
    int top = 0;
    for (int i = 0, j = 0;i < s.size();i++) {
        while (j && s[i] != p[j])j = pmt[j - 1];
        if (s[i] == p[j])j++;
        f[i] = j;
        stk[++top] = i;
        if (j == p.size()) {
            top -= p.size();
            j = f[stk[top]];
        }
    }
    for (int i = 1;i <= top;i++)cout << s[stk[i]];
    return 0;
}

http://www.kler.cn/news/234498.html

相关文章:

  • EMC学习笔记(二十四)降低EMI的PCB设计指南(四)
  • 网神 SecGate 3600 防火墙 route_ispinfo_import_save 文件上传漏洞
  • STM32F1 引脚重映射功能
  • 查看 iOS 系统的日志或崩溃日志
  • rancher迁移账号密码
  • Flask 项目自动生成 API 文档的高效实践
  • 阿里云游戏服务器一年费用多少?
  • Linux - updatedb 命令
  • c语言--指针数组(详解)
  • HTTP相关问题
  • Xilinx FPGA——在线升级
  • Tiny Http源码解析
  • AJAX——URL查询参数
  • 《CSS 简易速速上手小册》第7章:CSS 预处理器与框架(2024 最新版)
  • 基于SpringBoot和PostGIS的震中影响范围可视化实践
  • k8s-资源限制与监控 15
  • Django中的SQL注入攻击防御策略
  • Symbol.toStringTag用法
  • unity显示图片
  • 中科大计网学习记录笔记(八):FTP | EMail
  • linux进程(进程状态)
  • 再说开源软件
  • 瑞吉外卖实操笔记五----店铺营业状态设置与用户端微信登录实现
  • Junit常用注解
  • 如何在苹果Mac上进行分屏,多任务处理?
  • 深入学习《大学计算机》系列之第1章 1.7节——图灵机的一个例子
  • 蓝桥杯每日一题之内存问题
  • Elementplus报错 [ElOnlyChild] no valid child node found
  • Spring Boot与Kafka集成教程
  • Django模板(二)