编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 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函数中的例子