zoukankan      html  css  js  c++  java
  • KMP算法理解

    1、KMP算法解决问题:对BF(Brute Force)算法优化,避免对主串进行回溯匹配(匹配不成功主串指针向后移1位,子串指针重置开始位置,两串继续匹配),效率底。

    2、KMP算法原则/目的:主串不回溯即匹配指针就指在失配位置,由子串/模式串移动,由这样模式完成字符串匹配。

    3、KMP算法怎样实现目的:通过子串/模式前后缀是否存在匹配情况,来决定子串/模式是否需要在失配位置前移子串/模式。

    注意:子串/模式前后缀要取最长匹配,这样才能保证不会错过主串中任何一个拥有与子串开头相同的位置。

    3.1、子串/模式前后缀为零,子串/模式指针指向开始位置,主串与子串从失配位置开始匹配。

    为什么可以这样?因为失配之前主串与子串的字符都是一样的,而且前后缀为零表示子串没有相同的字符。

    这样的话假如主串回溯回去匹配能匹配上吗? 肯定匹配不上的。

    第一次匹配不上后,第二次匹配直接从失配位置开始匹 配。为什么可以这样?因为abc已经匹配上,而且子串abc各字母又不相同,

    如果继续主串错一位与子串匹配,这样浪费时间。

  • 相关阅读:
    九度oj 题目1371:最小的K个数
    九度oj 题目1131:合唱队形
    九度oj 题目1450:产生冠军
    九度oj 题目1135:字符串排序
    九度oj 题目1534:数组中第K小的数字
    九度oj 题目1179:阶乘
    九度oj 题目1369:字符串的排列
    九度oj 题目1100:最短路径
    [Luogu] 子串
    [Luogu] 魔法树
  • 原文地址:https://www.cnblogs.com/chenweichu/p/9016969.html
Copyright © 2011-2022 走看看