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

【字符串处理】关于KMP算法输出的是什么代码

输入:

ABCDABTBD_TISABCDABC
ABCDABC

 

q为当前nxt处理的模版文本串下标;

k为“失配时去哪里”,详情请看注释。

--------------我是求完nxt的分界线------------------

q为当前文本串判断到哪里;

nxt为“失配时去哪里”。

 

 

输出:
nxt[q(1)]=k(0);
nxt[q(2)]=k(0);
nxt[q(3)]=k(0);
k(0)++;
nxt[q(4)]=k(1);
k(1)++;
nxt[q(5)]=k(2);
k(2)++;
nxt[q(6)]=k(3);
next数组求解完毕
q(0)++;
q(1)++;
q(2)++;
q(3)++;
q(4)++;
q(5)++;
q=nxt[q-1](0);
q=nxt[q-1](0);
q(0)++;
q(1)++;
q(2)++;
q(3)++;
q(4)++;
q(5)++;
q(6)++;
return i(19)-lp(7)+1;
pos=13

 

 

-------------------我是代码分界线------------------------

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 string T,P;
 5 int nxt[1000002];
 6 void mkNxt(){
 7     nxt[0]=0;
 8     int k,q;
 9     for(k=0,q=1;q<P.length();q++){//遍历模版串以求出next数组
10         while(k>0&&P[k]!=P[q]){
11             k=nxt[k-1];//如果遇到“已经匹配过超过一个字符”又不匹配的地方,返回上一次求出的next,找到第二个已经匹配的地方
12         }
13         if(P[k]==P[q]){//如果成功就k++
14             k++;//换句话说,k代表着当前能够匹配的最大长度
15         }
16         nxt[q]=k;//记录
17     }
18     
19 }
20 void KMP(){
21     int q=0;
22     for(int i=0;i<T.length();i++){//文本T和模版P匹配
23         while(q>0&&P[q]!=T[i]){//如果不匹配就拿出“最长前后缀表”
24             q=nxt[q-1];
25         }
26         if(P[q]==T[i]){//匹配一个就加大长度
27             q++;
28         }
29         if(q==P.length()){
30             cout<<i-q+2<<endl;//完全匹配就输出
31         }
32     }
33 }
34 int main(){
35     cin>>T>>P;
36     mkNxt();
37     KMP();
38     for(int i=0;i<P.length();i++){
39         cout<<nxt[i]<<" ";
40     }
41 }
显示神奇代码

 

  这份代码在洛谷上提交通过了。

  地址是 https://www.luogu.org/problemnew/show/P3375

转载于:https://www.cnblogs.com/dudujerry/p/9652632.html

相关文章:

  • 好分数阅卷3.0_揭秘!自考阅卷的批改套路!
  • 手机沙盒隔离软件_最好别装手机杀毒软件,不仅没用反而是累赘!
  • 一个简单的注册页面
  • 主进程和子进程_Python 简明教程 26,Python 多进程编程
  • golang文件下载断点续传(下载客户端)
  • 天体运行轨迹_按彗星轨迹,太阳系中存在第二平面,有可能是彗星的“第二家园”...
  • 一个网页打开的全过程
  • 环境图配置不存在pbr_[翻译]你也可以制作的PBR!
  • 单引号和双引号的区别
  • 前端缓动画为什么不能有小数_前端兼容性的一些问题
  • luogu4187 [USACO18JAN]Stamp Painting (dp)
  • jsencrypt vue使用_在VUE中使用RSA加密解密加签解签__Vue.js
  • Learning-Python【6】:Python数据类型(2)—— 列表、元组
  • 如何计算虚拟化vcpu_【虚拟化实战】VM设计之一vCPU
  • 小希的迷宫(并查集判环)
  • [笔记] php常见简单功能及函数
  • 【comparator, comparable】小总结
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • const let
  • Fastjson的基本使用方法大全
  • iOS编译提示和导航提示
  • Java的Interrupt与线程中断
  • JS数组方法汇总
  • Python爬虫--- 1.3 BS4库的解析器
  • React-redux的原理以及使用
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于游标的分页接口实现
  • 聊聊sentinel的DegradeSlot
  • 模型微调
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 由插件封装引出的一丢丢思考
  • zabbix3.2监控linux磁盘IO
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #《AI中文版》V3 第 1 章 概述
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (vue)页面文件上传获取:action地址
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)Linux——Linux常用指令
  • (强烈推荐)移动端音视频从零到上手(上)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)可以带来幸福的一本书
  • (转)重识new
  • (状压dp)uva 10817 Headmaster's Headache
  • ***利用Ms05002溢出找“肉鸡
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net 6.0 处理跨域的方式
  • .net core 依赖注入的基本用发
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 发送邮件