拓展kmp

简介: 拓展kmp

来源:F04 扩展 KMP(Z 函数)_哔哩哔哩_bilibiliZ 函数(扩展 KMP) - OI Wiki (oi-wiki.org)

c++

复制代码

vector<int> z_function(string s) {
  int n = (int)s.length();
  s = "#" + s;
  vector<int> z(n+1,0);
  z[1] = n;
  for (int i = 2, l = 0, r = 0; i <= n; ++i) {
    if(i <= r)z[i] = min(z[i - l + 1],r - i + 1);
    while(s[1 + z[i]] == s[i + z[i]])z[i] ++;
    if(i + z[i] - 1 > r)l = i,r = i + z[i] - 1;
  }
  return z;
}


相关文章
|
2月前
|
算法
【算法沉淀】最长回文子串
【算法沉淀】最长回文子串
|
8月前
|
人工智能 BI
树状数组及其拓展
树状数组及其拓展
41 0
|
8月前
|
算法
单源最短路的拓展应用
单源最短路的拓展应用
51 0
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
86 0
|
2月前
|
算法
白话 KMP 算法
白话 KMP 算法
23 2
|
2月前
|
算法 Java 索引
算法基础:KMP算法详细详解
算法基础:KMP算法详细详解
|
9月前
|
存储 算法
KMP超高效匹配算法
KMP超高效匹配算法
|
11月前
|
算法 测试技术
算法强化每日一题--倒置字符串
算法强化每日一题--倒置字符串
|
存储 算法
一文吃透KMP
本文主要为了解决字符串匹配问题,在解决字符串匹配问题的方法中,最为出名的就是BF(暴力)解法和KMP解法,两者相比,前者更易理解但效率没有后者高。 本文通过先介绍BF解法,来为KMP解法做铺垫,使得两种解法都更易理解;一般题目中会涉及两个字符串,一个是文本串(haystack),另一个是模式串(needle),需要在文本串中找到模式串,如果找到了就返回模式串在文本串出现位置的下标,如果没有出现就返回-1.
124 0
一文吃透KMP