给定字符串 S
,找出最长重复子串的长度。如果不存在重复子串就返回 0
。
示例 1:
输入:"abcd" 输出:0 解释:没有重复子串。
示例 2:
输入:"abbaba" 输出:2 解释:最长的重复子串为 "ab" 和 "ba",每个出现 2 次。
示例 3:
输入:"aabcaabdaab" 输出:3 解释:最长的重复子串为 "aab",出现 3 次。
示例 4:
输入:"aaaaa" 输出:4 解释:最长的重复子串为 "aaaa",出现 2 次。
提示:
- 字符串
S
仅包含从‘a‘
到‘z‘
的小写英文字母。 1 <= S.length <= 1500
920 ms
1 class Solution { 2 var lcp:[[Int]] = [[Int]](repeating:[Int](repeating:0,count:1505),count:1505) 3 func longestRepeatingSubstring(_ S: String) -> Int { 4 var n:Int = S.count 5 var ans:Int = 0 6 var arrS:[Character] = Array(S) 7 for i in stride(from:n - 1,through:0,by:-1) 8 { 9 for j in (i + 1)..<n 10 { 11 if arrS[i] == arrS[j] 12 { 13 lcp[i][j] = lcp[i + 1][j + 1] + 1 14 } 15 else 16 { 17 lcp[i][j] = 0 18 } 19 ans=max(ans,lcp[i][j]) 20 } 21 } 22 return ans 23 } 24 }
原文地址:https://www.cnblogs.com/strengthen/p/10745819.html
时间: 2024-10-29 16:32:48