拓展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;
}


相关文章
|
7月前
|
算法
【算法沉淀】最长回文子串
【算法沉淀】最长回文子串
|
人工智能 BI
树状数组及其拓展
树状数组及其拓展
59 0
|
算法
单源最短路的拓展应用
单源最短路的拓展应用
77 0
|
7月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
111 0
|
7月前
|
自然语言处理 Rust 算法
【算法】14. 最长公共前缀(多语言实现)
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。
|
7月前
|
算法
白话 KMP 算法
白话 KMP 算法
40 2
|
7月前
|
算法 Java 索引
算法基础:KMP算法详细详解
算法基础:KMP算法详细详解
|
存储 算法
KMP超高效匹配算法
KMP超高效匹配算法
|
存储 算法
一文吃透KMP
本文主要为了解决字符串匹配问题,在解决字符串匹配问题的方法中,最为出名的就是BF(暴力)解法和KMP解法,两者相比,前者更易理解但效率没有后者高。 本文通过先介绍BF解法,来为KMP解法做铺垫,使得两种解法都更易理解;一般题目中会涉及两个字符串,一个是文本串(haystack),另一个是模式串(needle),需要在文本串中找到模式串,如果找到了就返回模式串在文本串出现位置的下标,如果没有出现就返回-1.
149 0
一文吃透KMP
|
算法 JavaScript Go
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化
目录 朴素模式匹配算法 KMP算法 求模式串的next数组 总结:求模式串的next数组 KMP算法优化
281 0
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化