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 if __name__ == '__main__': s = Solution() ls_n = ["dog", "racecar", "car"] ls = ["flower", "flow", "flight", "fly"] s.longestCommonPrefix(ls)
The Eight Day最长公共前缀
猜你喜欢
转载自www.cnblogs.com/jiyanjiao-702521/p/12653283.html
今日推荐
周排行