The Night Day最长公共前缀
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)