zoukankan      html  css  js  c++  java
  • 扩展KMP算法

    KMP算法中也涉及到子串与前缀的重复,而扩展KMP算法求得就是字符串S的所有后缀与字符串T的最长公共前缀

    可以知道,一个字符串所有的子串便是这个字符串所有后缀的所有前缀(或前缀的后缀 ),那么求的信息其实也是字符串S的所有子串与字符串T前缀的重复

    每个后缀的最长公共前缀长度存在一个extend数组中,具体代码没有研究,给当模板用了。。

    void getextend() {
        int p = 0;
        while (p < m && p < n && s[p + 1] == t[p + 1]) {   //计算第一个后缀
            p++;
        }
        extend[1] = p;
        int k = 1, l;
        for (int i = 2; i <= m; i++) {
            p = k + extend[k] - 1;
            l = next[i - k + 1];
            if (i + l <= p) {
                extend[i] = l;
            } else {
                int j = p - i + 1;
                if(j < 0) j = 0;
                while(i + j <= m && j + 1 <=n && s[i + j] == t[j + 1])    j ++;
                extend[i] = j;
                k = i;
            }
        }
    }
    

      

    推荐个题目,旋转数字 : http://acm.hdu.edu.cn/showproblem.php?pid=4333

  • 相关阅读:
    表单
    超链接
    图像
    表格
    排列清单控制标
    HTML基本结构
    如何快速查看网页源代码
    TOR的使用
    google搜索新姿势
    [NOIP2017]列队
  • 原文地址:https://www.cnblogs.com/lnu161403214/p/7896387.html
Copyright © 2011-2022 走看看