本文转载自:https://blog.youkuaiyun.com/Murphy_CoolCoder/article/details/79348931
作者:Murphy__
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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