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

字符串算法

字符串

  • 1.kmp匹配算法
  • Anya and 1100

1.kmp匹配算法

模板题链接
不懂可以看这个~详细的思路

在这里插入图片描述

#include <string>
#include <iostream>using namespace std;
const int N = 1000010;string s,p;// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度
int ne[N];int main()
{//读取字符串并在揩油加一个空格,使下标从1开始 cin >> s >> p;s = " " + s; p = " " + p; int n = s.size() - 1; //s的有效长度 int m = p.size() - 1;//p的有效长度 //求next数组 for(int i=2,j=0;i<=m;i++){while(j&&p[i]!=p[j+1])j=ne[j];// 从j位置回退if(p[i]==p[j+1])j++;// 如果匹配,j++ne[i]=j;// 保存最长前后缀的长度} //匹配操作 for(int i=1,j=0;i<=n;i++){while(j&&s[i]!=p[j+1])j=ne[j]; // 从j位置回退if(s[i]==p[j+1])j++; // 如果匹配,j++if(j==m)// 完全匹配{//匹配完成后的具体操作//如:输出以0开始的匹配子串的首字母下标//cout<<i-m<<endl;//如:输出以0开始的匹配子串的首字母下标//cout<<i-m+1<<endl; j=ne[j];// 根据 ne 数组更新 j}}for(int i=1;i<=m;i++){cout<<ne[i]<<' ';//输出next数组,也就是输出前缀的最长 border 长度。 }return 0;
}

Anya and 1100

传送门

#include <bits/stdc++.h> 
using namespace std;int main() {ios_base::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) { string s; cin >> s; set<int> st; // 使用集合来存储 "1100" 出现的起始位置int n = (int) s.size(); // 遍历字符串 s,找到所有 "1100" 的起始位置并存入集合 stfor (int i = 0; i < (int) s.size()-3; i++) {if (s.substr(i, 4) == "1100") st.insert(i); // 将起始位置插入集合}int q; cin >> q; while (q--) { int i; char v; cin >> i >> v; if (n < 4) { // 如果字符串长度小于 4,无法形成 "1100"cout << "NO\n"; continue; }i--; // 转换为 0 基索引if (s[i] != v) { // 如果 s[i] 的值与新值 v 不同// 更新之前,删除对 "1100" 出现情况的影响for (int j = max(0, i-3); j <= i; j++) {if (s.substr(j, 4) == "1100") // 检查子串st.erase(j); // 如果找到了,移除集合中的位置}s[i] = v; // 更新字符串中的字符// 更新之后,重新检查 "1100" 的出现情况for (int j = max(0, i-3); j <= i; j++) {if (s.substr(j, 4) == "1100") // 检查子串st.insert(j); // 如果找到了,添加到集合中}}// 根据集合 st 的情况输出结果if (st.empty()) {cout << "NO\n"; // 如果集合为空,输出 NO}else {cout << "YES\n"; // 否则输出 YES}}}
}

http://www.mrgr.cn/news/65781.html

相关文章:

  • 24/11/4 算法笔记 蛇形卷积
  • hivt实战
  • 分析自动下载电路是如何工作的以及CH340的选型
  • Rust的enum枚举的强大用法
  • 全志A133 android10 LVDS幅值调节
  • SpringBoot+Shiro权限管理
  • Android CCodec Codec2 (十九)C2LinearBlock
  • 【软考】反规范化技术
  • Python 类和对象
  • MeetingMind:AI 会议助手,支持自动转录音频并提取会议中的关键信息
  • 408 计算机组成原理、操作系统:异常和中断的总结
  • GESP4级考试语法知识(计数排序-桶排序)
  • 管易到金蝶销售数据集成全流程详解
  • AI大模型重塑软件开发:从代码自动生成到智能测试
  • AVLTree
  • 程序员都在用的AI编码助手
  • C++练习题
  • kafka版本
  • PH热榜 | 2024-11-04
  • 【解决办法】无法使用右键“通过VSCode打开文件夹”
  • python 通过执行脚本安装库或卸载库
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)
  • Linux 系统启动
  • JAVA设计模式之【建造者模式】
  • 图像压缩——图像编码与压缩标准
  • 【自动化】十款开源测试开发工具推荐自动化、性能、造数据、流量复制等