最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 “”。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
list1 = strs
list2 = []
list3 = []
flat = True
f = 1
while 1:
for m in list1 : #遍历list1
list2.append(m[:f]) #切片:将列表每一个元素前f个字符取出放入list2
len2 = len(list2) #获取list2长度
if len2 == 0 : #如果长度为0,说明输入为空,直接返回 “”
return ""
num1 = list2[0] #记录list2第一个元素
for m in list2 : #用第一个元素与其他元素作比较
if num1 != m : #发现与其他元素不同,标记为false,否则继续循环
flat = False
if flat is False and f == 1: #如果为False且 f 等于1,说明第一个字符就不相同
return ""
elif flat is False or list3 == list2 : #为false且大于1,说明有部分相同;list3==list2说明完全相同
return list3[0]
f += 1 # 用 f 决定切片的字符数
list3 = list2 # 将本次循环的结果记录到list3中
list2 = [] #清空list2
这个解法的主要思路就是,将输入的列表进行遍历,将每一个元素的第一个字符取出,放入一个新的列表,如果都相同,则下一次循环取每元素的前2个字符,不相同就返回“”,如此类推
通过这个问题也弥补了自己的一些盲区,比如:
判断列表是否为空不能用 is None:
list1 = [ ]
if list1 is None :
类似这样用法是不可以的,当初在这里卡了很久。。。
如有错漏,请多多指教吖!
题库来源:https://leetcode-cn.com