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 |
|