串部分伪代码
1、以顺序存储结构表示串,设计算法。求串SSS中出现的第一个最长重复子串及其位置并分析算法的时间复杂度
文字思想:
本质上就是模式匹配
假设字符串长度为n,下标从0开始:
1)i…n-1的字符依次作为子串subStr,其中i∈[0,n-1]
2)对subStr求next数组,保留其中最大值
3)对所有subStr的最大值中的最大值,就是该字符串的最大重复长度
// 改进next数组
int getNextMax(char *s,int *next) {
// 获取s的长度
int len = strlen(s);
int i = 0, // 逐位求next值
k = -1, // 用于求next的值
max = 0; // 当前next数组的最大值
next[0] = -1; // next数组中第一位特殊处理
// 逐位求
while (i < len) {
// 填写next数组
if (k == -1 || s[i] == s[k]) {
k++;
i++;
// 记录当前next数组的最大值
if (k > max) {

该博客讨论了如何使用顺序存储结构表示串,并提出了一个算法来查找串S中第一个最长重复子串及其位置。算法的时间复杂度为O(n^2),空间复杂度为O(n)。
最低0.47元/天 解锁文章
1510

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



