携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
一、题目描述:
14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、思路分析:
思路大概就是将问题分为列表长度为0于不为0两种情况进行考虑:
(1)列表长度为0,直接返回"",此时不存在公共前缀
(2)列表长度不为0,先获得列表中最短字符串的长度,因为最长公共前缀不会超过最短字符串的长度\
之后我们先用循环遍历从0至minlen - 1(最短字符串长度 - 1)的下标,并在此遍历基础上遍历列表中的元素,并且将每次遍历得到的字母于列表中首个字符串的相应字母进行对比:
(1)倘若遍历过程中,未出现字母不相等的情况,则将该字母存储到一个result空列表里
(2)倘若在第一次遍历每个字符串的首字母时出现了字母不相等的情况,则直接返回"",因为此时并不存在公共前缀
(3)倘若所有字符串首字母相等,而遍历过程中出现了字母不相等的情况,则立刻通过一些函数连接result列表中存储的字母并将所得的字符串作为公共前缀进行返回。
再附上求解该题使用的一些知识点:
(1)len(str)#用于获取str字符串的长度
(2)str[x]#字符串切片操作,用于获得字符串str中下标为x的字母
(3)x.join(List(strs))#在.join()前填写一个字符串x,在括号里填写一个以字符串为元素构成的列表,而后会返回一个按照列表顺序,由x连接列表中各个元素的字符串。(例如"x".join(["a", "b", "c"])会返回字符串:"axbxc"
三、AC 代码:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) != 0:
minlen = len(strs[0])
for i in range(0, len(strs)):
if len(strs[i]) < minlen:
minlen = len(strs[i])
result = []
for m in range(0, minlen):
for i in range(0, len(strs)):
if m == 0 and strs[i][m] != strs[0][m]:
return ""
if m != 0 and strs[i][m] != strs[0][m]:
return "".join(result)
result.append(strs[0][m])
return "".join(result)
else:
return ""