leetcood学习笔记-14*-最长公共前缀
笔记:
python if not
判断是否为None的情况
if not x
if x is None
if not x is None
if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。
使用if not x这种写法的前提是:必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行
链接:https://www.cnblogs.com/chenya/p/4218761.html
题目描述:
第一次提交:
class Solution: def longestCommonPrefix(self, strs ): ''' :param strs: List[str] :return: -> str: ''' commen="" if not strs: return commen for i in range(len(strs[0])): temp = "" for s in strs: if len(s)>i: if temp=="": temp=s[i] #print(temp) elif s[i]!=temp: return commen else: return commen commen+=temp return commen
方法二:利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀
class Solution: def longestCommonPrefix(self, strs ): ''' :param strs: List[str] :return: -> str: ''' 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
方法三:利用python的zip函数,把str看成list然后把输入看成二维数组,左对齐纵向压缩,然后把每项利用集合去重,之后遍历list中找到元素长度大于1之前的就是公共前缀
class Solution: def longestCommonPrefix(self, strs ): ''' :param strs: List[str] :return: -> str: ''' 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
笔记:
Python zip() 函数
描述
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
链接:http://www.runoob.com/python/python-func-zip.html
其他方法:分治法,二分法,字典树 见官网题解