1. 读懂题目
注意: 字符串数组的长度不一定是3,范围是0-200。
2. 分析,推导解法,产生思路。
解题思路:(1)暴力法,取一个子字符串与后面的所有字符串比较,遍历所有字符串,找最长公共前缀"
(2)转化为求字典序最小与最大的字符串的最长公共前缀
(3)利用python特性,*strs(字符串数组)拆分字符串,zip取每个字符串同一位置的字母,利用set去重比较是否相同。
def longestCommonPrefix1(self, strs):
"""取一个子字符串sp与后面的字符串比较,遍历所有字符串,找最长公共前缀"""
if not strs:
return ""
res = strs[0]
i = 1
while i <len(strs):
while strs[i].find(res) != 0: # str1.find(str2):str1中包含str2则返回0,否则返回-1
res = res[:len(res)-1]
i = i +1 # 判断下一个字符串
return res
def longestCommonPrefix2(self, strs):
"""字符串数组的最长公共前缀可以转化为求字典序最小与最大的字符串的最长公共前缀"""
if not strs:
return ""
str0 = min(strs)
str1 = max(strs)
print(str0, str1)
for i in range(len(str0)):
if str0[i] != str1[i]:
return str0[:i]
return str0
def longestCommonPrefix3(self, strs):
# 利用python特性,zip取每个字符串同一位置的字母,利用set去重比较是否相同
# zip()压缩可迭代对象,*号解压可迭代对象;
# 此处*把strs拆分为flower flow flight,zip把strs每个字符串对应位置的字母组合成一个tuple,eg:('f', 'f', 'f')
res = ""
for set_i in zip(*strs):
if len(set(set_i)) == 1:
res += set_i[0]
else:
break
return res