LeetCode in Python-14. Longest Common Prefix 最长公共前缀
题目
解法1、逐位比较
class Solution:
def longestCommonPrefix(self, strs):
if not strs:
return ""
for i in range(len(strs[0])):
for string in strs[1:]:
if i >= len(string) or string[i] != strs[0][i]:
return strs[0][:i]
return strs[0]# 当strs = [""]时,strs视为存在,所以此处我们直接返回第一个元素,即“”
以第一个单词作为基准,不同就返回前i位
注意第二个单词可能比第一个单词短,防止超出循环范围,先比较i >= len(string)
解法2、利用集合性质
class Solution:
def longestCommonPrefix(self, strs):
result = ""
i = 0
while True:
try:
sets = set(string[i] for string in strs)
if len(sets) == 1:
result += sets.pop()
i += 1
else:
break
except Exception as e:
break
return result
1、分别把所有单词的对应位放入集合,若集合长度不为1就返回
2、用while True时注意及时跳出,常借助try except
解法3、zip+sets
class Solution:
def longestCommonPrefix(self, strs):
r = [len(set(c)) == 1 for c in zip(*strs)] + [0]
return strs[0][:r.index(0)] if strs else ''
1、zip()解压,zip(star)的结果(输入:strs = [“flower”, “flow”, “flight”])
2、因为在python中0==False,此处index(0)结果为2
解法4、借助os模块自带函数。。。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
return os.path.commonprefix(strs)
出处
1、2、https://www.bilibili.com/video/av45842114
3、对应题目下Knife丶的题解
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 452966517@qq.com
文章标题:LeetCode in Python-14. Longest Common Prefix 最长公共前缀
文章字数:363
本文作者:Night Zhang
发布时间:2019-07-26, 17:30:28
最后更新:2019-07-26, 17:33:06
原始链接:https://night-zhang.github.io/2019/07/26/LeetCode-in-Python-14-Longest-Common-Prefix-最长公共前缀/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。