(python)小菜狗算法日记(字符串系列)

    技术2022-07-13  59

    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""。

    示例 1:

    输入: ["flower","flow","flight"] 输出: "fl" 示例 2:

    输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明:

    所有输入只包含小写字母 a-z 。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-prefix 暴力,主要是注意索引不要越界:

    class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return '' res = '' ss = strs[0] n = len(ss) lens = len(strs) for i in range(n): #第一个字符串的索引 for j in range(1,lens): #字符串列表的索引 if i>len(strs[j])-1: #索引越界则返回结果 return res if strs[j][i]!=ss[i]: #发现不等的时候返回结果 return res res+=ss[i] return res

    通过题解区大佬的代码学习了zip(*)的用法,这个*是拆包的意思,主要是用于传多值参数的情况

    比如经常看到的func(*args,**kargs),传多个参数时一个*使多个参数被当作一个元组传递进去,两个*代表当作一个字典

    而zip的作用是是打包成包含元组的zip对象

    (模拟一下,比如list ["flo","flo","fli"]经过*拆包成元组后分别变成('f','l','o'),('f','l','o'),('f','l','i')

    然后zip打包将第一列,第二列,第三列分别包在一起 变成('f','f','f'),('l','l','l'),('o','o','i')

    ps:上述两行都是我自己主观臆测方便理解的,我觉得挺有道理, 具体内部是否这样暂未考证,因为一般都是zip(*list)直接出结果,不拆开解释,结果也是一个zip对象的迭代器。)

    下面用zip(*)解这个题:

    class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: res = '' for i in zip(*strs): if len(set(i))==1: #说明都是重复的 res+=i[0] else: break return res

    代码来源https://www.runoob.com/python/python-func-zip.html python菜鸟教程zip函数中的例子

     

    Processed: 0.011, SQL: 9