zoukankan      html  css  js  c++  java
  • python(leetcode)-14最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。
    
    如果不存在公共前缀,返回空字符串 ""。
    
    示例 1:
    
    输入: ["flower","flow","flight"]
    输出: "fl"
    示例 2:
    
    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。
    说明:
    
    所有输入只包含小写字母 a-z 。
    

     这题比较好理解,给定一个列表,查询列表中的公共前缀

    自己的想法是直接暴力法解决,将列表的第一个值作为对比值,通过一层for循环不断遍历对比值与其他元素是否相等,如果相等则继续对比,如果不等return比较过的值。

    上代码(40ms)击败12%用户

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         sig=True
     8         i=0
     9         if(strs==[] ):  #判断是否为空
    10             return ""
    11         if(len(strs)==1): #判断是否只有一个值
    12             return strs[0]
    13         if ("" in strs): #判断有没有空值
    14             return ""
    15         while(sig==True ):    #sig是一个bool类型值 True继续判断 False中断返回
    16             if(len(strs[0])<=i): #判断对比值是否越界
    17                 return strs[0][0:i]
    18             temp=strs[0][i]   #第i个字符
    19             for j in strs[1:]:
    20                 if(temp!=j[i] ): #如果第i字符不匹配 则返回前i-1个字符
    21                     return strs[0][0:i]
    22                 elif(temp==j[i] and len(j)==i+1): #如果第i字符为最后一个一字母,则不继续对比,返回前i个
    23                      sig=False
    24                      k=i
    25             i += 1
    26         return strs[0][0:k+1]
    27 if __name__=="__main__":
    28     s=Solution()
    29     li=["flower","flo","flight"]
    30     print(s.longestCommonPrefix(li))

    看了评论区大佬的代码,觉得有一个想法特别好

    上代码(28ms)击败94%

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         if not strs: return ""
     8         if len(strs) == 1: return strs[0]
     9 
    10         strs.sort()
    11         p = ''
    12         for x, y in zip(strs[0], strs[-1]):
    13             if x == y:
    14                 p += x
    15             else:
    16                 break
    17         return p
    18 if __name__=="__main__":
    19     s=Solution()
    20     li=["flower","fl","flight"]
    21     print(s.longestCommonPrefix(li))

    解释一下:

    前两句没啥好说的,判断特殊情况

    然后进行排序,直接将第一个元素和最后一个元素对比,提取出相同字符。

    特点:排序后的列表,不需要对比中间的元素 直接对比最后两个即可。

  • 相关阅读:
    Vue基本使用
    缓存数据库
    Web框架
    爬虫基础知识及scrapy框架使用和基本原理
    轮播组件/瀑布流/组合搜索/KindEditor插件
    Model&Form&ModelForm拾遗
    评论操作展示
    评论操作
    windows 下安装 redis
    Notepad++ 列块模式编辑,替换换行符
  • 原文地址:https://www.cnblogs.com/bob-jianfeng/p/10436557.html
Copyright © 2011-2022 走看看