题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl”
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-common-prefix/
解法一:
依次遍历,依次找到长度为1、2、3...l的公共前缀。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
s = ''
nums = len(strs)
max_length = 0
for i in range(nums):
if len(strs[i])>max_length:
max_length = len(strs[i])
for i in range(max_length):
s = strs[0][0:i+1]
for j in range(nums):
if s!=strs[j][0:i+1]:
return s[0:i]
return s
解法二:
水平扫描:先计算s1和s2的公共前缀S',再计算S'和s3的公共前缀,以此类推。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
n = len(strs)
if n==0:
return ''
if n==1:
return strs[-1]
s1 = strs[0]
s2 = strs[1]
s = self.ComnnonPrefix(s1, s2)
for i in range(2, n):
if s=='':
break
s = self.ComnnonPrefix(s, strs[i])
return s
def ComnnonPrefix(self, s1, s2):
s = ''
l1 = len(s1)
l2 = len(s2)
l = min(l1, l2)
for i in range(0, l):
if s1[i]==s2[i]:
s += s1[i]
else:
break
return s