Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 根据题目的描述我们可以知道,输入的内容是一组字符串,都是由小写字母字符组成的
- 输出的结果,字符串公共的前缀
二、思路分析:
我们拿到本题,脑袋里面想到最简单的方法纵向对比每一个字符串的字符如下:
- 找到列表中长度最短的字符串
- 在最短字符串中分别取出每个一个字符,与列表中一系列字符串每一个字符串进行比较
- 在列表最短的字符串为空时,直接就返回空
按照上述的思路,我们使用python实现出,代码如下:
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
Min = min(strs)
len_num = len(strs)
List = []
if len(Min) ==0:
return ""
for index in range(len(Min)+1):
num = 0
for n in range(len_num):
if index == 0:
if Min[index] in strs[n]:
if Min[index] != strs[n][0]:
return ""
else:
num += 1
else:
if Min[0:index] in strs[n]:
if index < len(strs[n]):
if Min[0:index] == strs[n][0:index]:
num +=1
else:
if Min[0:index] == strs[n][:]:
num +=1
if num == len_num:
if index ==0:
List.append(Min[index])
else:
List.append(Min[0:index])
if len(List) == 0:
return ""
else:
return max(List)
查看解析,对比大佬们实现,上述代码太复杂且低效,俗称低质量代码。
我们来优化一下上述代码。
- 首先我们对输出的strs 进行升序排序,则strs[0]就是我们最短的字符串
- 我们直接将最短字符串和最长字符创建,进行对比就可以得出公共的字符串前缀
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
strs.sort()
start = strs[0]
end = strs[len(strs)-1]
res = ""
for i in range(len(start)):
if i < len(end) and start[i] == end[i]:
res += start[i]
else:
break
return res
第一种代码实现和第二种代码,直观感受就是简洁明了。
当然速度也是有一定的提高。
三、总结:
我们提交代码,可以AC结果。
第一种方式:时间复杂度O(mn),空间复杂度O(n) 第二种方式:时间复杂度O(n),空间复杂度O(1)