LeetCode每日一题--最长公共前缀
2020-03-15 18:22
555 查看
【前言】坚持日更LeetCode刷题系列
不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!
【题目】14.最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
示例:
示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: ""
思路一:纵向扫描。找出列表中长度最短的字符串,遍历该字符串的每一个元素,与列表中其他字符串相应位置的字符进行比较,若相同则继续,否则退出循环。实现代码如下:
def getlen(elem): return len(elem) class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if len(strs) == 0 : #列表无字符串的特殊情况 return "" else: strs.sort(key=getlen) #按照字符串的长度进行排序 if(len(strs[0])==0): #传入的第一个字符串为空的特殊情况 return "" else: flag = 1 #设立标志,判断是否结束循环 for i in range(len(strs[0])): #进行纵向扫描 for j in range(1,len(strs)): if strs[j][i] != strs[0][i]: flag = 0 break if(flag==0): i = i-1 #取上一个相等的字符 break if(i<0): return "" else: return strs[0][:i+1] #由于遍历的时候不包含右端元素,因此i+1
运行结果:
关于其中一些知识的链接:
思路二:来源于LeeCode某大佬的评论,利用python的max()和min(),
在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。
所以只需要比较最大最小的公共前缀就是整个数组的公共前缀。
def longestCommonPrefix(self, strs): if not strs: return "" s1 = min(strs) s2 = max(strs) for i,x in enumerate(s1): if x != s2[i]: return s2[:i] return s1
运行结果:
Notice:比较方式:从前往后按位比,ascII是和字符对应的,不是整个字符串,所以按位比较,当前面的几位字符相等时当前位要是大于或小于那就不用往后比了
思路三:来源于LeeCode某大佬的评论,利用python的zip函数,把str看成list然后把输入看成二维数组,左对齐纵向压缩,然后把每项利用集合去重,之后遍历list中找到元素长度大于1之前的就是公共前缀。
def longestCommonPrefix(self, strs): if not strs: return "" ss = list(map(set, zip(*strs))) res = "" for i, x in enumerate(ss): x = list(x) if len(x) > 1: break res = res + x[0] return res
运行结果:
关于其中一些知识的链接:
更多思路:来源于官方,主要有分治思想,二分查找,trie字典树,下方附上原地址链接。
分享就到这里了,欢迎大家一起交流讨论。
注明:
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix/
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- 每日一练之Longest Common Prefix【LeetCode No.14】——求字符串的最长公共前缀
- (LeetCode每日一刷05)最长公共前缀
- 【leetcode每日一题】【2019-05-20】14. 最长公共前缀
- Datawhale-LeetCode集训打卡-最长公共前缀
- leetcode-14-求字符串数组最长公共前缀
- LeetCode--14. Longest Common Prefix(最长公共前缀子串)
- LeetCode 14. 最长公共前缀
- Leetcode刷题记——14. Longest Common Prefix(最长公共前缀)
- LeetCode-14-Longest Common Prefix(最长公共前缀)
- leetcode_14. 最长公共前缀(python)
- Leetcode:14.最长公共前缀
- LeetCode题解(python)-14. 最长公共前缀
- LeetCode 14. Longest Common Prefix最长公共前缀
- leetcode 201. Bitwise AND of Numbers Range 最长公共前缀问题 + 位操作
- LeetCode -- 求字符串数组中的最长公共前缀
- leetcode总结:最长公共前缀
- 【LeetCode】14. 最长公共前缀
- LeetCode 14. Longest Common Prefix(最长公共前缀)
- Leetcode 14. 最长公共前缀
- Python学习-Leetcode刷题记5:最长公共前缀