首页 > 编程语言 > 详细

最长公共前缀-Python

时间:2020-06-08 01:03:18      阅读:43      评论:0      收藏:0      [点我收藏+]
  • 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

    • 示例 1:输入: ["flower","flow","flight"]输出: "fl"示例
    • 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。
  • 思路1:可循环遍历列表中每个字符串,判断字符串相同的位置的字母是否相等,如果相等则记录字母并判断下一个字母,否则就返回记录的字符串。

    mls1 = ["flower","flow","flight"]
    mls1 = ["dog","racecar","car"]
    
    def mfun(mls1):
        mls2 = []		# 用来记录相同的字母
    
        if len(mls1) == 0:
            return ‘‘	# 如果列表为空,直接返回
    
        num = 0
        for k in mls1:		# 循环字符串,找到最短的长度,作为最长公共子串的最长长度
            if len(k) > num:
                num = len(k)
    
        for i in range(num):	# i 为下标值
            for j in mls1:		# 将列表中每个字符串的第 i 个字母添加到列表中
                mls2.append(j[i])
            if (len(set(mls2))) == 1:	# 对列表进行集合操作,如果集合后长度为1 则
                						# 这几个字母相同,继续判断下一个字母
                mls2.clear()
            else:			# 如果长度不为1, 最长公共子串已经找到,
                # print(i)
                if j[0:i:1]:	# 切片操作找到 最长公共子串
                    return (j[0:i:1])
                else:
                    return ""
    print(mfun(mls1))
    
  • 思路2:可以运用Python 中的内置函数zip ,方便的判断最长公共子串。

    def mfun2(strs):
        ans = ‘‘	# 定义空字符串,准备用来存放最长公共子串
        for i in zip(*strs):	# *strs 将列表解包成几个字符串元素
            if len(set(i)) == 1:	# 判断zip后的元素的集合的长度,如果=1,
                					# 说明几个字母相等,追加到最长公共子串中
                ans += i[0]
            else:					# 否则就是不相等。
                break
        return ans
    
  • zip函数解析:

    zip(iterable, iterable, ...)
    # zip的参数是多个迭代器, 返回值为 几个元组作为元素的列表。
    # zip 类似于矩阵操作: 例如:
    zip(‘123‘, ‘456‘, ‘789‘)
    
    操作过程:
    		1  2  3 
        	4  5  6
            7  8  9
     ====>   将行变成列,将列变成行,组成列表返回
    		1  4  7
        	2  5  8
            3  6  9
     ====> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
    
    for i in zip(‘123‘, ‘456‘, ‘789‘):
        print(i)
        
    (‘1‘, ‘4‘, ‘7‘)
    (‘2‘, ‘5‘, ‘8‘)
    (‘3‘, ‘6‘, ‘9‘)
    
    
    >>>a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [4,5,6,7,8]
    >>> zipped = zip(a,b)     # 打包为元组的列表
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(a,c)              # 元素个数与最短的列表一致
    [(1, 4), (2, 5), (3, 6)]
    >>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
    [(1, 2, 3), (4, 5, 6)]
    

最长公共前缀-Python

原文:https://www.cnblogs.com/wangxiaowu/p/13062645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!