• 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)
        
  • 相关阅读:
    算法笔记_182:历届试题 核桃的数量(Java)
    算法笔记_181:历届试题 回文数字(Java)
    算法笔记_180:历届试题 国王的烦恼(Java)
    算法笔记_179:历届试题 数字游戏(Java)
    算法笔记_178:历届试题 邮局(Java)
    算法笔记_177:历届试题 城市建设(Java)
    算法笔记_176:历届试题 最大子阵(Java)
    算法笔记_175:历届试题 蚂蚁感冒(Java)
    redis集群与分片(2)-Redis Cluster集群的搭建与实践
    redis集群与分片(1)-redis服务器集群、客户端分片
  • 原文地址:https://www.cnblogs.com/jiyanjiao-702521/p/12653283.html
Copyright © 2020-2023  润新知