编程题:字符串的最长重复子串

要注意的是,这里说的最长重复子串是可以重合的,如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"))

你可能感兴趣的:(各种编程题)