转自
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)
思路如下,若字符串列表为空,则返回”“.否则在字符串列表中找到 长度最短 的字符串P(因为在字符串列表中最长公共前缀不可能超过其最短的字符串)。用P作为模式串与原字符串列表逐项比较,在某一项比较中:
1).若在偏移0处即失配,则原字符串列表最长公共前缀为空,终止.
2).若在i处与最短字符串P失配,则更新最短字符串 P = P[:i],同时跳出循环,与下一项字符串比较;
3).若与最短字符串完全匹配,继续比较下一项。
注意,如果原字符串列表中有多个相同的最短字符串P, 则要跳过不与该项比较。
时间复杂度:若字符串列表中有N个字符串,最短字符串的长度为M,该算法的时间复杂度为O(M*N)
python
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
else:
minstr = strs[0]
for st in strs:
if st < minstr:
minstr = st
for st in strs:
if st == minstr:
continue
for i in range(len(minstr)):
if st[i] == minstr[i]:
i += 1
elif i == 0:
return ""
else:
minstr = minstr[:i]
break
return minstr