推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

字符串的进阶操作:Z算法与最长公共前缀.docx

更新时间:2026-10-16 12:38:43 大小:38K 上传用户:江岚查看TA发布的资源 标签:Z算法Z-function最长公共前缀字符串匹配算法复杂度 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

字符串的进阶操作:Z算法与最长公共前缀

一、Z算法简介

Z算法(Z-function)是字符串处理的高效工具,它计算每个位置开始的子串与整个字符串的最长公共前缀长度。

// Z数组定义
// Z[i] = s[0..] 与 s[i..] 的最长公共前缀长度
// 特殊:Z[0] = 0(约定)

// s = "abcababc"
// Z = [0, 0, 0, 2, 0, 2, 0, 0]
// Z[3] = 2:s[3..4]="ab" 与 s[0..1]="ab" 相同
// Z[5] = 2:s[5..6]="bc" 与 s[0..1]="ab" 不同...(示例示意)

二、Z数组的计算

2.1 朴素计算 O(n²)

int *computeZNaive(const char *s) {
    int n = strlen(s);
    int *z = (int *)calloc(n, sizeof(int));
    
    for (int i = 1; i < n; i++) {
        int len = 0;
        while (i + len < n && s[len] == s[i + len]) {
            len++;
        }
        z[i] = len;
    }
    return z;
}


部分文件列表

文件名 大小
字符串的进阶操作:Z算法与最长公共前缀.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载