题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
思路:
既然是找公共,为了减少遍历次数,首先选择去找数组中长度最小的str,然后列出str的排列情况去遍历数组中的str是否包含,包含则记录,否则return,有两种方法。
方法一:
先找到 strs 中的最小长度 str ,然后检查str 中的每一个字符是否在每一个 strs 项中,在就累加,如果不在,返回当前值
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs)==0:return ''
s=''
str=strs[0]
for key in strs: #找到最小长度项
if len(key) < len(str):
str = key
for i in range(len(str)):
for j in range(len(strs)): #判断各项对应str位置是否相等,相等才累加
if str[i]!=strs[j][i]:
return s
s=s+str[i]
return s
执行用时 :20 ms, 在所有 Python 提交中击败了83.89%的用户
内存消耗 :12.7 MB, 在所有 Python 提交中击败了5.88%的用户
方法二:
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs)==0:return ''
str=strs[0]
for key in strs: #找到最小长度项
if len(key) < len(str):
str = key
for i in range(len(strs)):
while (strs[i].find(str) !=0):#检查数组中字符串是否包含当前str,并且index要为0->意思是数组字符串从str开始(公共),不是则shift 一位继续查找,直到找到最大位符合的str
str=str[:-1]
return str
执行用时 :16 ms, 在所有 Python 提交中击败了94.60%的用户
内存消耗 :12.8 MB, 在所有 Python 提交中击败了5.88%的用户