Z数组的元素Z[i]存储从str[i]开始的最长子串的长度,也是str[0..n-1]的前缀。 时间复杂度O(n)。 用于处理字符串匹配问题,记个模板代码。
vector<int> z_function(string s) {
int n = s.size();
vector<int> z(n);
int l = 0, r = 0;
for(int i = 1; i < n; i++) {
if(i < r) {
z[i] = min(r - i, z[i - l]);
}
while(i + z[i] < n && s[z[i]] == s[i + z[i]]) {
z[i]++;
}
if(i + z[i] > r) {
l = i;
r = i + z[i];
}
}
return z;
}
本文介绍了如何使用Z数组(Z函数)来计算给定字符串中每个位置的最长相同前缀长度,这是一种在O(n)时间内解决字符串匹配问题的有效方法,给出了相应的C++模板代码示例。
1255

被折叠的 条评论
为什么被折叠?



