当前位置: 首页 > 后端技术 > Python

LeetCodeLongestCommonPrefix

时间:2023-03-26 00:29:13 Python

LongestCommonPrefix题目来源:https://leetcode-cn.com/problems/longest-common-prefix/题目写一个函数,在一个字符串数组中找到最长的公共前缀。如果不存在公共前缀,则返回空字符串""。示例1:输入:["flower","flow","flight"]输出:"fl"示例2:输入:["dog","racecar","car"]输出:""解释:输入不存在公共前缀。解释:所有输入仅包含小写字母a-z。解题思路方法一:如果字符串数组为空或者长度为0,直接返回空字符串;取第一个字符串并将其与下一个字符串进行比较以获得两者的公共前缀;如果两者比较的结果没有共同的前缀,直接返回空字符串。否则,进行下一步;将获得的公共前缀与下一个字符串进行比较;重复步骤3和4,得到字符串数组的最长公共前缀。方法二:思路是利用zip()的特性,实现字符串数组中各个字符串的逐列比较;使用set()对列进行去重,如果剩余字符的长度为1,则表示全部相同。否则,跳出循环。最后逐列比较,set()对长度为1的列进行去重,组合为最长公共前缀。如果没有符合要求的列,则直接返回空字符串。代码实现方法一:代码实现类解决方法:deflongestCommonPrefix(self,strs:List[str])->str:'''求字符串数组的最长公共前缀args:strs:传入要匹配的字符串数组returns:返回字符串数组中存在的最长公共前缀,不存在则返回空字符串""'''#如果列表为空,则直接返回空字符ifnotstrs:return""#取第一个字符串并等待它与下面的比较prefix=strs[0]#遍历字符串数组并逐个比较foriinrange(1,len(strs)):#比较两个字符串,在找到公共前缀之前,whilestrs[i]一个一个比较。find(prefix)!=0:#在没有找到公共前缀之前,从末尾一一删除prefix=prefix[0:len(prefix)-1]#如果没有公共前缀,则直接返回iflen(prefix)==0:return""returnprefix方法二:代码实现类解决方法:deflongestCommonPrefix(self,strs:List[str])->str:'''求字符串数组的最长公共前缀Args:strs:传入要匹配的字符串数组返回:返回字符串数组中存在的最长公共前缀,不存在则返回空字符串""'''#利用zip()函数的特点逐列比较字符字符串数组中的每个字符串prefix_len=[]#用于保存num,s中常用字符的长度inenumerate(zip(*strs)):#使用set()去重#如果只保留1个字符,then表示列相同#否则列不同,直接跳出iflen(set(s))==1:prefix_len.append(num)else:break#如果prefix_len为空,返回一个空stringdirectly#否则截取任何字符串prefix_len列表长度的字符,即最长公共前缀returnstrs[0][:len(prefix_len)]ifprefix_lenelse""实现效果方法一:实现效果方法2:实现效果以上就是本文的主要内容。欢迎关注微信公众号《书所集录》