Leetcode 14. 最长公共前缀 Python
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
自己解法1(太慢了)
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
out = ""
if strs==[]:return out
for j in range(len(strs[0])):
p=0
for i in range(1,len(strs)):
if j>len(strs[i])-1: break
if strs[0][j] == strs[i][j]:
p = p+1
else:return out
if p==len(strs)-1:
out += strs[0][j]
return out
汗颜。
经提示解法(较慢)
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
out = ""
if strs==[]:return out #空字符输出
if len(strs)==1:return strs[0]
#如果列表长度是1输出第一个字符,节省空间时间
newstrlength = len(min(strs, key=len)) #巧!先把公共长度缩小成列表中最小字符串的长度
for j in range(0,len(strs)-1):
if strs[j]=="":
return out #只要有空行就直接输出空字符串(节省时间空间)
newstrlength=min(len(strs[j+1]),newstrlength) #长度和下一字符串长度的最小值
for i in range(newstrlength):
if strs[j][i] != strs[j+1][i]:
newstrlength = i
break
#只要有不一样的,置newstrlength值并进入下一个字符比较循环
return strs[0][:newstrlength] #返回第一个字符串前公共数个字符就好
思路:
虽然效果一样,但是更简洁的办法看
https://tundrazone.com/?p=189
大神
https://blog.youkuaiyun.com/qq_34364995/article/details/80274107
非常简洁,但是看不太懂,希望有看懂的同学跟我交流。
res = ""
if len(strs) == 0:
return ""
for each in zip(*strs):#zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
if len(set(each)) == 1:#利用集合创建一个无序不重复元素集
res += each[0]
else:
return res
return res