Python程序查找字符串中最长重复子字符串的长度
假设我们有一个小写字符串 s,我们需要找到在 s 中至少出现两次的最长子字符串的长度。如果找不到这样的字符串,则返回 0。
因此,如果输入类似于 s = "abdgoalputabdtypeabd",则输出将为 3,因为出现不止一次的最长子字符串是 "abd"。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数 lcs()。它将接收 s1 和 s2 作为参数。
- n := s1 和 s2 大小的最小值
- 对于 i 从 0 到 n - 1 的范围,执行以下操作:
- 如果 s1[i] 与 s2[i] 不相同,则
- 返回 s1 的子字符串(从索引 0 到 i-1)
- 如果 s1[i] 与 s2[i] 不相同,则
- 返回 s1 的子字符串(从索引 0 到 n - 1)
- 从主方法中执行以下操作:
- suffixes := 一个新的列表
- n := s 的大小
- max_len := 0
- 对于 i 从 0 到 n - 1 的范围,执行以下操作:
- 将 (s 的子字符串(从索引 i 到 n - 1))插入到 suffixes 的末尾
- 对列表 suffixes 进行排序
- 对于 suffixes 中的每个项目 a 和 suffixes 的子字符串(从索引 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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP