最长公共前缀 python_Leetcode Python算法题(5)——最长公共前缀

题目重现:day005

这道题真是有点emmm.....每次提交都能发现自己的漏洞,查漏补缺做出来了。但是比较冗长,把代码和感想记录如下:

class Solution:

def longestCommonPrefix(self, strs):

count = 0

if len(strs) > 1:

if len(min(strs, key=len)) == 0:

flag = False

else:

flag = True

while flag:

for i in range(1, len(min(strs, key=len))+1):   #检测每一个字符

for j in range(len(strs)-1):

if strs[j][:i] == strs[j+1][:i]:

if j+1 == len(strs)-1:    #运行到最后一个字符串

count += 1

flag = False

break

else:

flag = False

break

if count > 0:

return strs[0][:count]

elif len(strs) == 1:

return strs[0]

else:

return ''

主要的输入区别有strs=[],strs=[' ',' '],strs=['a']这些特殊类型,每碰到一种新情况我就改进一点。看了评论区大神的做法,流下了没有技术的泪水:

class Solution:

def longestCommonPrefix(self, strs: List[str]) -> str:

if not strs: return ""

str0 = min(strs)

str1 = max(strs)

for i in range(len(str0)):

if str0[i] != str1[i]:

return str0[:i]

return str0

这里主要是利用了min和max函数,其实我一开始在第一个for循环那里也有点这个思想,但是我找的是最短的那个字符串。没有想到python的min和max函数可以直接根据字母大小排序.....简直就是魔法。在python中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False

之后我改进了成自己觉得比较好理解的版本:

class Solution:

def longestCommonPrefix(self, strs):

count = 0

if len(strs)==0 or '' in strs:

return ""

a = min(strs)

b = max(strs)

for i in range(1,len(a)+1):

if a[:i] == b[:i]:

count += 1

return a[:count]

用一个count计数到哪个相等的位置。这里不太熟练的还是从0开始的技术方式,包括range,但是在a[:i]上的索引是从1开始计数的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值