今日题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例:
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
分析
解题
根据上面思想直接敲~
双重for循环时间复杂度:应该不到O(n^2)
class Solution():
def longestCommonPrefix(self,strs):
len0 = len(strs)
if len0 == 0:
return 0
list_len = []
# 找出最短的字符串长度
for i in range(len0):
list_len.append(len(str[i]))
list_len.sort()
print(list_len)
# 取出最短的子串
# 我这里是直接取第一个子串的前min_len
com_str = strs[0][0:list_len[0]]
b0 = com_str
for s in strs:
for i in range(list_len[0]):
if s[i] != com_str[i]:
# 判断到有不等的地方
a0 = s[0:i]
if len(b0) >= len(a0):# 上一个最长公共前缀是否比现在长
b0 = a0
return b0
a = Solution()
str = ["flower","flow","flight"]
print(len(str[1]))
result = a.longestCommonPrefix(str)
print(result)
大牛
一层for循环时间复杂度:O(n)
class Solution():
def longestCommonPrefix(self,strs):
res = ''
if len(strs) == 0:
return ''
# zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
for each in zip(*strs):
# 利用集合创建一个无序不重复元素集
print(each)
print("------------")
if len(set(each)) == 1:
res += each[0]
else:
return res
return res
a = Solution()
str = ["flower","flow","flight"]
print(len(str[1]))
result = a.longestCommonPrefix(str)
print(result)
来自 老表 https://mp.weixin.qq.com/s/YPfCRxAfd2IkaiQi-pMUHA
老表《简说Python》提供
向林
2020年2月4日于重庆城口
好好学习,天天向上,终有所获