zoukankan      html  css  js  c++  java
  • 【字符串处理】关于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

  • 相关阅读:
    编辑器 --- Visual Studio Code 英文界面转换成中文(简体)
    CSS3 -- column 实现瀑布流布局
    CSS3 -- 边框圆角
    CSS3 -- 弹性盒
    自适应布局要素
    Vue -- 基础知识
    Vue -- element-ui el-table 的合计在第一行显示并可点击
    如何在网页标题栏title加入logo(icon)图标?
    linux下暴力破解工具hydra【转】
    linux 服务简介
  • 原文地址:https://www.cnblogs.com/dudujerry/p/9652632.html
Copyright © 2011-2022 走看看