- 题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
- 示例
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
- 解决方案一
首先找出字符串数组中最短的字符串长度minl,这也是最长公共前缀可以取到的最大值;然后开始依次遍历字符串数组,判断每一个字符串的前minl个字符是否一样,思路是从下标0开始,如果前边的字符不一样,那么后边的字符也就不用再判断了。
- 代码一
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
if len(strs) == 1:
return strs[0]
#找出最短的字符串长度minl
minl = min([len(x) for x in strs])
#遍历每一个字符串的前min1个字符
end = 0
while end < minl:
for i in range(1,len(strs)):
#如果当前字符串的第end个字符和它前一个字符串的第end个字符不一样,那么就不再进行后边的判断,最长公共前缀的长度为end
if strs[i][end] != strs[i-1][end]:
return strs[0][:end]
end += 1
return strs[0][:end]
- 解决方案二
字符串比较大小值时是按照ACII码来排序的,比如min(['a', 'abc', 'ae'])为'a',max(['a', 'abc', 'ae'])为'ae'所以只需比较字符串数组中的最大值和最小值即可。
- 代码二
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
# 如果strs为空, 返回空字符串;
if not strs: return ''
# 找最长公共前缀, 只需对比最长的字符串和最短字符串;
s1 = min(strs)
s2 = max(strs)
for i, c in enumerate(s1):
if c != s2[i]:
return s1[:i]
return s1