1. 程式人生 > >[Swift-2019力扣杯春季決賽]3. 最長重復子串

[Swift-2019力扣杯春季決賽]3. 最長重復子串

字母 func ans 字符串 bin rom span run 出現

給定字符串 S,找出最長重復子串的長度。如果不存在重復子串就返回 0

示例 1:

輸入:"abcd"
輸出:0
解釋:沒有重復子串。

示例 2:

輸入:"abbaba"
輸出:2
解釋:最長的重復子串為 "ab" 和 "ba",每個出現 2 次。

示例 3:

輸入:"aabcaabdaab"
輸出:3
解釋:最長的重復子串為 "aab",出現 3 次。

示例 4:

輸入:"aaaaa"
輸出:4
解釋:最長的重復子串為 "aaaa",出現 2 次。

提示:

  1. 字符串 S 僅包含從 ‘a‘‘z‘ 的小寫英文字母。
  2. 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 }

[Swift-2019力扣杯春季決賽]3. 最長重復子串