14. 最长公共前缀
描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
思路
首先考虑特殊情况,即列表中没有字符串或者只有一个字符串。
列表中最长的相同前缀就是列表中最短的那个字符串的长度。
从头开始匹配,关键是停止遍历的条件:不再相同,此时就可以直接返回。
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
# 特殊情况:没有字符串/有一个字符串
if len(strs) == 0:
return ""
if len(strs) == 1:
return strs[0]
len_strs = len(strs)
# 最大长度为所有字符串中长度最短的那个
max_len_prefix = min([len(str) for str in strs])
for idx_pre in range(0, max_len_prefix):
for idx_strs in range(1, len_strs):
if strs[0][idx_pre] != strs[idx_strs][idx_pre]:
return strs[0][:idx_pre]
# 如果在for中没返回,则最长的前缀长度就为max_len_prefix
return strs[0][:max_len_prefix]