本人一直在努力地积累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]