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))
解释一下:
前两句没啥好说的,判断特殊情况
然后进行排序,直接将第一个元素和最后一个元素对比,提取出相同字符。
特点:排序后的列表,不需要对比中间的元素 直接对比最后两个即可。
不太相信弯道超车,更欣赏仰望星空与脚踏实地