zoukankan      html  css  js  c++  java
  • 【题解】P3375 【模板】KMP字符串匹配

    这道题目是比较经典的 (KMP) 模板,用一个模式串匹配一个文本串,输出全部匹配的位置
    首先考虑最暴力的做法:
    我们从最开始的位置暴力匹配,如果成功,那么就返回 (i-j)(i)是文本串当前的位置,(j)是模式串当前的位置
    否则,我们就回溯到 (i-j+1),因为我们开始匹配的位置是 (i-j) ,那么它的下一位就是 (i-j+1)
    复杂度为 (O(n^2))
    我们可以发现,当我们在匹配的过程中,我们不一定要返回到 (i-j+1) 开始重新匹配,能不能只让模式串动,而不让文本串动呢?
    答案是有的,这就要请到我们今天的主角: (KMP)
    (KMP) 本质上的匹配是和暴力一样的,只不过它加了一个 (next) 数组,从而优化了时间复杂度。
    (i)(j) 匹配时,那么我们直接令 (i++,j++) ,但如果不匹配呢?
    这时,我们就令 (j=next[j]) ,注:(next[j]) 表示的是

  • 相关阅读:
    将博客搬至CSDN
    JDBC
    Java刷题常用API
    Java的反射机制
    Java的IO流
    Docker原理:Cgroup
    Docker原理:Namespace
    Anaconda软件安装使用问题
    初步了解Unix系统的I/O模式
    深入理解索引和AVL树、B-树、B+树的关系
  • 原文地址:https://www.cnblogs.com/Call-me-zhz/p/11349647.html
Copyright © 2011-2022 走看看