Leetcode-最长公共前缀
2019-01-31 13:26
281 查看
Leetcode-最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
说明:所有输入只包含小写字母 a-z 。
方法一:直接查找
取其中一个子字符串,然后依次遍历其余字符串,直到找到最长的前缀
class Solution: def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if len(strs) < 1: return "" str0 = strs[0] #取第一个字符串 pre_nums = 0 for i in range(len(str0)): #循环取出字符串 index = 0 for j in range(1, len(strs)): #遍历其余字符串,找相同的前缀 if i+1 <= len(strs[j]) and str0[:i+1] == strs[j][:i+1]: index += 1 else: break if index == len(strs)-1: #找到相同前缀后,前缀数量+1 pre_nums += 1 else: break return str0[:pre_nums]
方法二:二分查找
首先拿出最小的字符串,用二分法找最长的公共前缀
class Solution: def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if len(strs) < 1: return "" if len(strs) == 1: return strs[0] length = len(strs) #记录字符串数组长度 min_str = min(strs) #取出最小的字符串 len_min = len(min_str) #记录最小字符串长度 low = 0 high = len_min - 1 index = True #标志位,记录找到了公共前缀 middle = (low + high)//2 mid_str = min_str[:middle+1] res = "" while(low <= high): index = True mid_str = min_str[:middle+1] #print(low,high,middle) for i in range(length): #循环整个字符串数组,判断是否是公共前缀 if mid_str != strs[i][:middle+1]: index = False break if not index: #如果不是,更新high high = middle - 1 middle = (low + high)//2 #res_str = min_str[:middle+1] else: #如果是,更新low,并记录res结果 low = middle + 1 middle = (low + high)//2 res = mid_str return res
相关文章推荐
- leetcode-最长公共前缀
- Leetcode:Longest Common Prefix 最长公共前缀
- (LeetCode每日一刷05)最长公共前缀
- LeetCode Longest Common Prefix 最长公共前缀
- LeetCode 14. Longest Common Prefix最长公共前缀
- leetcode——14——Longest Common Prefix最长公共前缀
- LeetCode -- 求字符串数组中的最长公共前缀
- LeetCode 找到一个字符串数组的最长公共前缀
- LeetCode 14. 最长公共前缀
- LeetCode14-最长公共前缀
- Leetcode 14: 最长公共前缀(Longest Common Prefix)
- leetcode-最长公共前缀
- Leetcode#14. Longest Common Prefix (最长公共前缀字符串)
- 【LeetCode】[14] 最长公共前缀
- 【leetcode数组和字符串】最长公共前缀
- LeetCode 14 Longest Common Prefix(最长公共前缀)(String)
- Leetcode题库-最长公共前缀(java语言版)
- leetcode 14 最长公共前缀(python)
- LeetCode:最长公共前缀(Longest Common Prefix)
- Leetcode(14) 最长公共前缀