编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
这道题看着很简单,只要将列表前两个元素进行对比,找出他们的公共子串,然后拿他们的公共子串和之后的元素进行对比,由于子串的长度不大,所以只需遍历O(n*k)(最差情况)就可以了。但是题目的数据里有很多坑,容易考虑不到,比如传入列表元素为空,传入列表元素只有一个这些,导致我WA了好几发才过的题,代码如下
# 已经战胜 42.80 % 的 python 提交记录
# 输入: ["flower","flow","flight"]
# 输出: "fl"
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
ans = ""
strs_lens = len(strs)
if strs_lens == 0:
return ""
if strs_lens == 1:
return strs[0]
else:
for i in range(min(len(strs[0]),len(strs[1]))):
if strs[0][i] == strs[1][i]:
ans += strs[0][i]
else:
break
#到这里就求出了前两位的公共字串
for i in range(2, strs_lens):
if len(strs[i]) == 0:
return ""
lensx = min(len(ans),len(strs[i]))
for j in range(lensx):
if strs[i][j] == ans[j]:
if lensx < len(ans):
ans = ans[:lensx]
continue
else:
ans = ans[:j]
break
if ans == "":
return ""
else:
return ans
s = Solution()
ans = s.longestCommonPrefix(["flower","flow","flight"])
print(ans)