转自
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