要注意的是,這裏說的最長重複子串是可以重合的,如abcabcabc中,這裏說的最長重複子串是abcabc,而不是abc。
這題的思路就是,得到字符串的後綴數組並將其排序,再依次檢測相鄰兩個字符串的前綴取最長的就行:
# -*- coding:utf-8 -*-
__author__ = 'ShawDa'
class Solution:
def findLongestSubstring(self, string):
if not string or len(string)==1:
return None
# 生成字符串的後綴數組並排序
suffix = []
for i in range(len(string)):
suffix.append(string[i:])
suffix.sort()
# 依次檢測相鄰兩個字符串的前綴,取最大長度
max_l, res = 0, ''
for i in range(len(string)-1):
max_tmp = 0
for j in range(min(len(suffix[i]), len(suffix[i+1]))):
if suffix[i][j] == suffix[i+1][j]:
max_tmp += 1
else:
break
if max_tmp > max_l:
max_l, res = max_tmp, suffix[i][:max_tmp]
return res
if __name__ == '__main__':
print(Solution().findLongestSubstring("kabcabcabc"))