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


相关文章
|
6月前
|
人工智能 BI
树状数组及其拓展
树状数组及其拓展
35 0
|
6月前
|
算法
单源最短路的拓展应用
单源最短路的拓展应用
45 0
|
5天前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
76 0
|
5天前
|
自然语言处理 Rust 算法
【算法】14. 最长公共前缀(多语言实现)
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。
|
5天前
|
算法 Java 索引
算法基础:KMP算法详细详解
算法基础:KMP算法详细详解
|
5天前
|
算法
白话 KMP 算法
白话 KMP 算法
17 2
|
7月前
|
存储 算法
KMP超高效匹配算法
KMP超高效匹配算法
|
9月前
|
算法 测试技术
算法强化每日一题--倒置字符串
算法强化每日一题--倒置字符串
|
缓存 Rust 自然语言处理
【算法】5. 最长回文子串(多语言实现)
给你一个字符串 s,找到 s 中最长的回文子串。
【算法】5. 最长回文子串(多语言实现)
|
算法 JavaScript Go
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化
目录 朴素模式匹配算法 KMP算法 求模式串的next数组 总结:求模式串的next数组 KMP算法优化
207 0
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化