题目描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
示例 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 ""
length=len(strs[0])
prefix=""
# Search the shortest str
for item in strs:
if len(item) < length:
length=len(item)
# Find the longest prefix
for i in range(length):
pre=strs[0][i]
for item in strs:
if item[i] != pre:
return prefix
prefix=prefix+pre
return prefix
最优解法
关键点:使用sort()函数,只比较第一个和最后一个字符串的公共开头子串,减少了比较的次数。
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
# 排序后比较首尾两个就好
if len(strs) == 0:
return ""
strs.sort()
result = ""
for i in range(len(strs[0])):
if strs[0][i] != strs[-1][i]:
return result
result += strs[0][i]
return result
网友评论