要注意的是,这里说的最长重复子串是可以重合的,如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"))
版权声明:本文为sinat_36811967原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。