编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
本人只想到了暴力循环法,循环对比第一个字母,初始t为"",若首位全相同则追加至t并对比下一位,不相同则返回t。时间性能为O(n*m),用时44ms,在Longest Common Prefix的Python3提交中击败了99.65%的用户.
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs)==0:
return ""
t=""
flag=0
strs=sorted(strs,key=lambda x:len(x))
for n in range(len(strs[0])):
temp=strs[0][n]
for i in strs[1::]:
if i[n]==temp:
continue
else:
flag=1
break
if flag!=1:
t+=temp
return t
另外贴一个提交记录里的思路,取第一个字符串并与接下来的字符串循环对比,利用find()匹配查找,若返回索引不为0则去掉待匹配字符串最后一个字母,直到为空。
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs) == 0:
return ""
prefix = strs[0]
for s in strs[1:]:
while s.find(prefix) != 0:
prefix = prefix[0:len(prefix) - 1]
if prefix == "":
return prefix
return prefix