最长公共前缀

题目描述:给k个字符串,求出他们的最长公共前缀(LCP)

样例:在 "ABCD" "ABEF" 和 "ACEF" 中,  LCP 为 "A";在 "ABCDEFG", "ABCEFG", "ABCEFA" 中, LCP 为 "ABC"

其实最简单的方法,两两比较就行。

我用的是这种思路:先找出字符串数组中最长的字符串(为方便描述,记为max_str),然后用max_str从数组的头开始依次比较,每次比较能得到一个数值,就是两个串的最大公共前缀的长度,然后在max_str中截取这段长度,构成新的max_str,继续和数组下一个元素比较。

这样做的基本逻辑是每一次比较都会减小或者不动最长公共前缀(因为一开始取的是最长的字符串)

代码如下:

class Solution:
    # @param strs: A list of strings
    # @return: The longest common prefix
    def longestCommonPrefix(self, strs):
        if len(strs) == 0:
            return ""
        max_str = strs[0]
        max_len = len(max_str)
        # 寻找最长字符串
        for i in strs:
            if len(i) > max_len:
                max_str = i
                max_len = len(i)
        
        for i in strs:
            j = 0
            # count用来记录本次比较公共前缀的长度
            count = 0
            while j != len(i) and j != len(max_str):
                if i[j] == max_str[j]:
                    count += 1
                else:
                    break
                j += 1
            # 截取
            max_str = max_str[:count]
        return max_str
        # write your code here

你可能感兴趣的:(lintcode)