题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
解法一:
先遍历列表strs里面的第一个元素strs[0],将他字符的个数给i,字符给n。
再判断在strs列表里的其他字符串,对应的元素字符是否一样
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
result = ''
for i,n in enumerate(strs[0]):
for string in strs[1:]:
if i<len(string) and n==string[i]:
continue
else:
return result
result += n # 注意改行缩进,要和第二个for并列
return result
解法二:
先判断列表里面最小字符长度,
lambda是匿名函数
lambda x:x[i] 相当于
def function(x):
return x[i]
参考:https://blog.csdn.net/gaozhanfire/article/details/95664379
map函数
指的是,遍历列表里的每个元素都执行前面函数的操作
map(func,seq) 就是将函数作用在序列的每个元素上,然后创建由函数返回值组成的回列表
参考:
https://zhidao.baidu.com/question/872877827270808172.html
集合set
不包含重复值的set
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
result = ''
i = 0
minlen = len(min(strs))
while i<minlen:
if len(set(map(lambda x:x[i],strs)))>1:
return result
else:
result += strs[0][i]
i += 1
return result
解法三:
在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
result = ''
s1 = max(strs)
s2 = min(strs)
for i,n in enumerate(s2):
if n==s1[i]:
result += n
else:
break
return result
或者:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ''
result = ''
s1 = max(strs)
s2 = min(strs)
for i,n in enumerate(s2):
if n != s1[i]:
return s1[:i]
return s2
解法四:
参考:
https://www.cnblogs.com/davidlidvd/p/12263861.html
涉及zip()函数,暂时没看
python基础可看参考链接:
https://www.cnblogs.com/xiaxiaoxu/p/9740086.html