题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母 a-z 。
解题思路1:
- 找出列表中长度最小的字符串,并且记录它的长度。
- 逐一比较字符串的公共前缀,当所有字符串都满足条件时,记录下这个前缀。
- 当不满足条件时,设置两个break条件,来减少时间复杂度。
代码1:
class Solution(object):
def longestCommonPrefix(self, strs):
number = len(strs)
if number == 0: return ""
len_str = len(strs[0])
if number == 1: return strs[0]
len_str=[len(string) if len(string) < len_str else len_str for string in strs]
count = 0
flag = 0
res = []
min_len = min(len_str)
for j in range(min_len):
for i in range(number-1):
if strs[i][j] == strs[i+1][j]:
if i+1 == number-1:
res.append(strs[i][j])
else:
flag = 1
break
if flag == 1:
break
return "".join(res)
解题思路2:
LeetCode官方代码
代码2:
class Solution(object):
def longestCommonPrefix(self, strs):
str = ""
for i in zip(*strs):
if len(set(i)) == 1: # 集合的使用巧妙
str += i[0]
else:
break
return str
解题思路3:
用好 os
模块
代码3:
import os
class Solution(object):
def longestCommonPrefix(self, strs):
return os.path.commonprefix(strs)
题目来源: