编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
思路:这道题思路不难,主要是具体的实现。要找到字符串数组中的公共前缀,很直观的思路就是取出数组中每个字符串对应的字符来比一比,相同则继续;我们可以自己写函数,比如把第一个字符串做基准,然后每次都取第一个字符串对应位置的字符,然后去和数组中剩余字符串对应位置的字符相比,但这样很麻烦。这里使用python中的一个内置函数zip()
zip函数的介绍放在下面了。
使用zip函数,我们可以很方便的把字符串数组中每个位置对应的字符放在一起,例如
示例 1:
输入:strs = ["flower","flow","flight"]
我们使用zip函数后就会变成[(f,f,f),(l,l,l),(o,o,i),(w,w,g)],虽然flower和flight还有剩余字符,但flow字符已经全部结束了,所以使用zip函数不会包含剩余的字符。
这样一来,所有同位置的字符都被放在了一起,我们可以使用set来判断所有同位置的字符是否相同,若相同则加入共同前缀,否则结束。
zip函数:Python zip() 函数 | 菜鸟教程
代码(Python):
python
class Solution(object):
def longestCommonPrefix(self, strs):
result = '' #保存结果
zipped = zip(*strs) #对strs数组使用zip函数
for i,zipstr in enumerate(zipped):
if len(set(zipstr)) == 1: #若相同位置的字符都相同
result += zipstr[0] #加入共同前缀
else:
break
return result