- 背景:最近在leetcode做题,特在此写博客记录一下所犯的错误和改正。
- 题目:最长公共前缀:
- 描述:编写一个函数来查找字符串数组中的最长公共前缀;如果不存在公共前缀,返回空字符串
""
。 - 示例一:
理解:从例子中可以看出,公共前缀是字符串从左至右开始,共有的字符,可以使用切片进行操作。输入: ["flower","flow","flight"] 输出: "fl"
- 示例二
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
理解:只要第一个和第二个之间没有共有的前缀,就可以返回“”,因此可以编写一个子函数用于判断两个字符串之间是否有公共前缀。
-
代码
class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: # 当strs=[]或者strs=['']或者strs=['',''] if len(strs) == 0 or strs.count("") >= 1: return "" # 当strs只有一个非空字符串时,如['a'] if "" not in strs and len(strs) == 1: return strs[0] # 求两个字符串之间的公共前缀 def public_str(a, b): n = len(a) while n: if b.startswith(a[:n]): return a[:n] n = n - 1 i = strs[0] str_lists = [] for j in strs[1:len(strs)]: str_num = public_str(i, j) # 当两个字符串相比没有公共前缀时,函数public_str会返回None,而对于None类型,min无法判断 if str_num == None: return '' str_lists.append(str_num) return min(str_lists)
-
总结:
# 列表为[""]时,长度是1,而不是0
len([""])
1
# 切片操作是左闭右开区间,返回值的数量是区间右值-区间左值
'c'[0:0]
''
# min要有比较的东西,None就不能用min
min(['',''])
''
# startswith中间有’s'