編程題:字符串的最長重複子串

要注意的是,這裏說的最長重複子串是可以重合的,如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"))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章