1062. 最长重复子串 🔒
题目描述
给定字符串 s
,找出最长重复子串的长度。如果不存在重复子串就返回 0
。
示例 1:
输入:"abcd" 输出:0 解释:没有重复子串。
示例 2:
输入:"abbaba" 输出:2 解释:最长的重复子串为 "ab" 和 "ba",每个出现 2 次。
示例 3:
输入:"aabcaabdaab" 输出:3 解释:最长的重复子串为 "aab",出现 3 次。
提示:
1 <= s.length <= 2000
- 字符串
s
仅包含从'a'
到'z'
的小写英文字母。
解法
方法一:动态规划
定义 $dp[i][j]$ 表示以 $s[i]$ 和 $s[j]$ 结尾的最长重复子串 🔒 的长度。状态转移方程为:
$$ dp[i][j]= \begin{cases} dp[i-1][j-1]+1, & i>0 \cap s[i]=s[j] \ 1, & i=0 \cap s[i]=s[j] \ 0, & s[i] \neq s[j] \end{cases} $$
时间复杂度 $O(n^2)$,空间复杂度 $O(n^2)$。
其中 $n$ 为字符串 $s$ 的长度。
相似题目:
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|