最长公共前缀

问题描述

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串""
示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

思路

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

首先考虑是不是可以循环提取每个文本的第1个、第2个字母等对比,只要相同就接受。

但是感觉太复杂了。

考虑将第一个文本作为暂时的公共前缀,然后从第二个文本开始比较,逐一比较前缀,如果不相等,则去掉暂时前缀的最后一个字母,再比对,直到前缀相等。

temp = strs[0]
for i in range(1, len(strs)):
	while strs[i].find(temp) != 0:
		temp = temp[:-1]
	if not temp:
		return ""
return temp

关键

range(1, len(strs))就表示从第二个数到strs的末尾。

while strs[i].find(temp) != 0表示在strs的第i个文本中寻找temp,返回其索引,找不到就返回-1。当找到确实有这么一串前缀时,那么返回值必定为0,此时temp就是前缀了。当!=0时,就代表返回了-1呗,那就是没找到。就将temp切片,temp[:-1]表示从第一个到倒数第二个的切片。再接着循环,知道while~ = 0 ,那就是找到了。

或者啥也没找到,temp给切完了,就是if not temp,代表没有前缀了。

牢记 str.find() 方法,找到了返回索引,没找到返回-1,就酱紫。

结果

时间56ms,击败8.98%。
内存16.2mb,击败5.8%。
真的太拉了。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值