Longest Common Prefix
来源:互联网 发布:淘宝卖家如何借贷 编辑:程序博客网 时间:2024/06/07 00:55
leetcode第14题,寻找一组字符串的最长公共前缀。
这道题看起来不是特别难,可以用最直接的思路解,那就是逐个遍历,垂直比较所有字符串的同一位置的字符,一旦发现不同了,就立刻终止搜索。但是我写的有点过于麻烦了。
class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ strNum = len(strs) if strNum == 0: return "" minlen = min([len(sstr) for sstr in strs]) if minlen == 0: return "" prefix = [] flag = False for i in range(minlen): for j in range(strNum): if j == 0: flag = True ch = strs[j][i] else: if strs[j][i] == ch: flag = True else: flag = False break if flag == True: prefix.append(ch) else: break return "".join(prefix)
网上思路1:水平搜索,把任意一个字符串当做公共前缀,去其他字符串中匹配,如果不成功,就缩短公共前缀的长度继续匹配,知道能匹配上所有的字符串即可,如果都匹配不了,说明没有公共前缀。这个做法代码里会减少很多,而且很清晰易懂。
def longestCommonPrefix2(self, strs): n = len(strs) if n == 0: return "" prefix = strs[0] # 取第一个字符串作为搜索基础 for i in range(1, n): while strs[i].find(prefix) != 0: # 寻找子串,位置不是从0开始或者没找大返回了-1 prefix = strs[0][0:len(prefix)-1] if len(prefix) == 0: # 找到最好没有公共前缀 return "" return prefix
网上思路2:分治法,这个问题麻烦在于有很多个这样的字符串,每次都要多次比较才能看出所有字符串的同一位置上是不是相同。如果换成两个字符串比较,那就简单多了。基于这个思路,可以采用分治法,每次比较两个字符串,然后结果向上返回,一直比较到最后即可得出答案。
def commonPrefix(self,strLeft, strRight): # 寻找两个字符串的公共前缀 minLen = min(len(strLeft), len(strRight)) for i in range(minLen): if strLeft[i] != strRight[i]: return strLeft[:i] return strLeft[:minLen] def findPrefix(self, strs, left, right): # 分治法求公共前缀 if left == right: return strs[left] else: mid = (left+right)/2 lcpleft = self.findPrefix(strs, left, mid) lcpright = self.findPrefix(strs, mid+1, right) return self.commonPrefix(lcpleft, lcpright) def longestCommonPrefix3(self, strs): n = len(strs) if n == 0: return "" return self.findPrefix(strs, 0, n-1)
0 0
- LeetCode: Longest Common Prefix
- LeetCode Longest Common Prefix
- LeetCode : Longest Common Prefix
- [Leetcode] Longest Common Prefix
- leetcode6:Longest Common Prefix
- leetcode22: longest common prefix
- [LeetCode] Longest Common Prefix
- Leetcode14: Longest Common Prefix
- Longest Common Prefix
- Longest Common Prefix
- Longest Common Prefix
- [LeetCode]Longest Common Prefix
- Longest Common Prefix
- LeetCode-Longest Common Prefix
- Longest Common Prefix
- [LeetCode] Longest Common Prefix
- Longest Common Prefix
- LeetCode - Longest Common Prefix
- Javascript 代码优化
- Java内省introspector
- cf 540-C. Ice Cave
- 关于NIO笔记(二):缓冲区Buffer
- RBAC打造通用web管理权限02
- Longest Common Prefix
- SSH学习之Struts2的环境搭建
- Javascript原型链
- 【模板】常用排序
- c语言程序设计现代方法---第四章:表达式
- git忽略文件和文件夹
- Java 类集框架
- Javascript闭包
- php中的命名空间