Python 寻找若干字符串中最长的公共前缀

Leecode 中一道不难的题目。输入字符串列表例如 T = [‘abc’,’abcd’,’abfg’,’abopfge’], 则输出最长的公共前缀为 ‘ab’
思路如下,若字符串列表为空,则返回”“.否则在字符串列表中找到长度最短的字符串P(因为在字符串列表中最长公共前缀不可能超过其最短的字符串)。用P作为模式串与原字符串列表逐项比较,在某一项比较中:
1).若在偏移0处即失配,则原字符串列表最长公共前缀为空,终止.
2).若在i处与最短字符串P失配,则更新最短字符串 P = P[:i],同时跳出循环,与下一项字符串比较;
3).若与最短字符串完全匹配,继续比较下一项。
注意,如果原字符串列表中有多个相同的最短字符串P, 则要跳过不与该项比较。
时间复杂度:若字符串列表中有N个字符串,最短字符串的长度为M,该算法的时间复杂度为O(M*N)
源代码如下:

class Solution:
    def longestCommonPrefix(self, strs):
        if not strs:
            return ""
        else:
            minSubStr = strs[0]
            for subStr in strs:
                if len(subStr) < len(minSubStr):
                    minSubStr = subStr
            for subStr in strs:
                if subStr == minSubStr:
                    continue
                for i in range(len(minSubStr)):
                    if subStr[i] == minSubStr[i]:
                        i = i + 1
                    elif i == 0:
                        return 0
                    else:
                        minSubStr = minSubStr[:i]
                        break
            return minSubStr

猜你喜欢

转载自blog.csdn.net/Murphy_CoolCoder/article/details/79348931