用 Python 编写程序,查找字符串中最长重复子字符串的长度
pythonserver side programmingprogramming更新于 2026/1/23 12:28:17
假设我们有一个小写字符串 s,我们必须找到 s 中出现至少两次的最长子字符串的长度。如果我们找不到这样的字符串,则返回 0。
因此,如果输入为 s = "abdgoalputabdtypeabd",则输出将为 3,因为出现多次的最长子字符串是 "abd"。
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个函数 lcs() 。这将需要 s1、s2
- n := s1 的大小和 s2 的大小中的最小值
- 对于范围在 0 到 n - 1 内的 i,执行
- 如果 s1[i] 与 s2[i] 不同,则
- 返回 s1 的子字符串[从索引 0 到 i-1]
- 如果 s1[i] 与 s2[i] 不同,则
- 返回 s1 的子字符串[从索引 0 到 n - 1]
- 从主方法中,执行以下操作 −
- 后缀 := 一个新列表
- n := s 的大小
- max_len := 0
- 对于范围在 0 到 n - 1 内的 i,执行
- 在后缀末尾插入(s 的子字符串[从索引 i 到 n - 1])
- 对列表后缀进行排序
- 对于后缀中的每个项目 a 和后缀子字符串[从索引 1 到末尾] 中的 b,执行
- rtr := lcs(a, b)
- 如果 rtr 的大小 > max_len,则
- max_len := rtr 的大小
- 返回 max_len
示例
让我们看看下面的实现以便更好地理解 −
def lcs(s1, s2): n = min(len(s1), len(s2)) for i in range(n): if s1[i] != s2[i]: return s1[:i] return s1[:n] def solve(s): suffixes = [] n = len(s) max_len = 0 for i in range(n): suffixes.append(s[i:n]) suffixes.sort() for a, b in zip(suffixes, suffixes[1:]): rtr = lcs(a, b) if len(rtr) > max_len: max_len = len(rtr) return max_len s = "abdgoalputabdtypeabd" print(solve(s))
输入
"abdgoalputabdtypeabd"
输出
3
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

