给定字符串 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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。