day12-459.重复的子字符串
发布人:shili8
发布时间:2025-02-12 02:31
阅读次数:0
**Day12: 重复的子字符串**
在本题中,我们需要找到一个给定字符串中的最长重复子串。也就是说,找出其中最长的连续子序列。
### 题目描述给定一个长度为 `n` 的字符串 `s`,请你找出其中最长的重复子串。
### 示例1输入:`"abcabcabc"`,输出:`"abc"`
### 示例2输入:`"aaaaa"`,输出:`"aaaaa"`
### 示例3输入:`"abcdef"`,输出:`""`
### 解决方案我们可以使用滑动窗口法来解决这个问题。具体来说,我们会维护一个长度为 `n` 的哈希表,用于存储每个子串的最大重复长度。
#### 步骤1:初始化哈希表和变量
def longest_repeated_substring(s): n = len(s) # 初始化哈希表 max_len = [0] * (n +1) # 变量存储最长重复子串的长度和起始位置 max_len_str = ""
#### 步骤2:滑动窗口法
for i in range(1, n): for j in range(i +1, n +1): # 检查当前子串是否是重复的 if s[i -1:j] == s[0:i]: max_len[j] = max(max_len[j], max_len[i])
#### 步骤3:更新最长重复子串
# 更新最大长度和起始位置max_len_str = s[max_len.index(max(max_len))] return max_len_str
###代码注释* `max_len` 是一个哈希表,用于存储每个子串的最大重复长度。
* `max_len_str` 是一个变量,用于存储最长重复子串的长度和起始位置。
### 示例用例
print(longest_repeated_substring("abcabcabc")) # "abc" print(longest_repeated_substring("aaaaa")) # "aaaaa" print(longest_repeated_substring("abcdef")) # ""
本题的解决方案使用滑动窗口法来找到最长重复子串。我们首先初始化一个哈希表 `max_len` 来存储每个子串的最大重复长度,然后使用两个循环来检查当前子串是否是重复的。如果是,则更新 `max_len` 的值。最后,我们返回 `max_len_str` 中的最长重复子串。
本题的解决方案适用于所有类型的输入,包括空字符串和只包含一个字符的字符串。