问题:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
说明:
所有输入只包含小写字母 a-z
。
Example 1:
Input: ["flower","flow","flight"] Output: "fl"
Example 2:
Input: ["dog","racecar","car"] Output: "" Explanation: There is no common prefix among the input strings.
方法一:暴力解法,逐一对比
首先应该认识到,最长公共前缀的长度不超过最短字符串,所以我们在对每个字符进行对比时,对比次数不超过最短字符串的长度。因为无论字符串有多长,公共前缀的长度是相同的,所以我们可以取第一个字符串为比较的基准,逐一取它各个位置上的字符,然后将后续的字符串对应位置上的字符跟第一个字符串当前位置上的字符比较,如果都相同,那就把这个字符加入结果,否则返回结果。时间复杂度是O(n²)。
#Python
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs) == 0: #处理空字符串
return ""
minl = len(strs[0]) #以第一个字符串的长度作为初始化长度
for s in strs:
minl = min(minl,len(s)) #取最短字符串长度,如果用0初始化,那这个值永远是0
res = ""
for i in range(minl):
char = strs[0][i] #取第一个字符串上各个位置上的字符
for j in range(1,len(strs)):
if strs[j][i] != char: #将其后字符串上对应位置的字符和当前字符比较
return res #如果发现不相同,则直接返回结果
res = res + char #当前位置比较完发现字符都相同,就把这个字符加入结果
return res