LeetCode 14.最长公共前缀
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
我的代码:
class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return '' if len(strs) == 1: return strs[0] s1 = min(strs) s2 = max(strs) for i,j in enumerate(s1): if j != s2[i]: return s1[:i] return s1
ps:执行效率不是很高,可以学习一下大佬们的代码
大佬们的代码:
class Solution: def longestCommonPrefix(self, strs: 'List[str]') -> 'str': if len(strs) == 0: return '' if len(strs) == 1: return strs[0] prefix, chars = '', zip(*strs) for i, group in enumerate(chars): ch = group[0] for j in range(1, len(group)): if group[j] != ch: return prefix prefix += strs[0][i] return prefix
class Solution: def longestCommonPrefix(self, strs: 'List[str]') -> 'str': prefix = '' if len(strs) == 0: return prefix ptr, min_len = 0, min([len(str) for str in strs]) for _ in range(min_len): ch = strs[0][ptr] for i in range(1, len(strs)): if strs[i][ptr] != ch: return prefix ptr, prefix = ptr + 1, prefix + ch return prefix