本人一直在努力地积累Leetcode上用Python实现的题,并且会尽力讲清每道题的原理,绝不像其他某些博客简略地带过。
如果觉得讲的清楚,欢迎关注。
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
思路:给我们的数据是一个列表。这道题正常来说,是要去一步步扩大我们的前缀长度的,直到产生错误(与其他元素的前缀不相同),然后我们退回上一个Index。如果目前前缀对所有元素都符合,我们就扩大前缀长度。前缀长度从0开始,到列表中最小的元素的长度为止。
易错:1.应该选列表第一个元素作为参考值,避免参考元素不存在的情况。
2.在遇到不兼容的前缀后,没有将index-1,
3.在循环遍历时若遇到不兼容,后应该及时break。
4.index 最大值应该以列表中最小的元素的长度为标准,避免out of index
beat 81
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
index = 1
if strs == []:
return ""
minlen = min(map(len, strs))
count = 0
while index <= minlen:
jet = 1
for i in strs[1:]:
if not i.startswith(strs[0][:index]):
jet = 0
index -= 1
break
if jet == 0:
break
index += 1
count += 1
if count == 0:
return ""
if index > minlen:
index = minlen
return strs[0][:index]