class Solution(object):
"""
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
"""
"""
@author : jiyanjiao
@date :2020-4-7
"""
# 基本解法
list_fist_al = []
list_als = []
st = []
flag = 0 # 当子字符串最小的元素验证后,标记flag跳出循环
def longestCommonPrefix(self, strs):
"""
将传入的列表中的字符串均变成列表
:type strs: List[str]
:rtype: str
"""
# 存入新生成的列表
list_items = []
for i in range(len(strs)):
list_item = list(strs[i])
list_items.append(list_item)
i += 1
# 获取列表中子列表的第一个字符
self.list_p(list_items)
# 判断自列表中的第一个字符是否相同,相同继续循环,取各个自列表的第二个字符
while len(self.list_set(self.list_als)) != 0:
self.list_p(list_items)
if self.flag == 1:
break
if len(self.st) != 0:
print("最大公共字符串为:", ''.join(self.st))
else:
print("输入不存在公共前缀")
def list_set(self, lst):
"""
判断列表中的元素是否是一样的
:param lst:
:return:
"""
for i in range(len(lst)-1, len(lst)):
# 使用set集合去重,如果有唯一的元素证明整个列表元素相同
list_set = set(lst[i])
if len(list_set) == 1:
self.st.append(lst[i][0])
else:
break
i += 1
return self.st
def list_p(self, list_items):
"""
使用队列开始比较列表中的第一个字符
:param list_items:
:return:
"""
self.list_fist_al = []
for i in range(len(list_items)):
# 将每轮的第一个字符存入到一个列表中
self.list_fist_al.append(list_items[i].pop(0))
if len(list_items[i]) == 0:
self.flag = 1
break
i += 1
# 将每轮循环的第一个字符列表在加入一个列表中
self.list_als.append(self.list_fist_al)
return self.list_als
注:以上是从功能层面实现了(思路是对的),后来参考其他作者挖掘出python的一个函数直接搞定那就是zip,让我们一起看一下实现的代码吧
"""
思路二:
zip(*st rs)函数将列表变换成元组。然后使用集合set的互异性,判断set后的元组⻓度等于1,等于1则认为该字符是公共前缀,加入公共前缀字符串
作者:jixiang_1
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/liang-chong-si-lu-qiu-jie-by-jixiang_1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
"""
"""
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
"""
def longestCommonPrefix1(self, strs):
s = ""
for i in zip(*strs):
if len(set(i)) == 1:
s += i[0]
else:
break
print(s)
return s
if __name__ == '__main__':
s = Solution()
ls_n = ["dog", "racecar", "car"]
ls = ["flower", "flow", "flight", "fly"]
s.longestCommonPrefix(ls)