题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
解答
解法一
先对字符串列表进行排序,排序的依据是字母表的顺序
然后比较第一个子串和最后一个子串,找到共同的部分
def longestCommonPrefix_1(strs):
print('yes')
if len(strs) == 0: return ""
if len(strs) == 1: return strs[0]
strs.sort() # 对字符串列表进行排序,按照字符顺序
print(strs)
p = ""
for x, y in zip(strs[0], strs[-1]): # 只需要比较第一个和最后一个
if x == y:
p += x
else:
break
return p
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix_1(strs))
解法二
利用zip()函数
,取多个字符串中的同一位置上的元素,进行比较。如果是相同的,那么这些元素在取set()
后,长度为1。
# Python 特性,取每一个单词的同一位置的字母,看是否相同。
def longestCommonPrefix_2(strs):
res = ''
for tmp in zip(*strs):
tmp_set = set(tmp)
if len(tmp_set) == 1:
res += tmp[0]
else:
break
return res
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix_2(strs))
解法三
取一个单词 s,和后面单词比较,看 s 与每个单词相同的最长前缀是多少!遍历所有单词
def longestCommonPrefix_3(strs):
if not strs:
return ''
res = strs[0]
i = 1
while i < len(strs):
while strs[i].find(res) != 0: # 查找res是否为strs[i]的子串,没找到就返回-1,如果是第0个位置匹配到的话,就返回0
res = res[0:len(res) - 1] # 从后往前缩短res
i += 1
return res
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix_3(strs))
解法四:一行代码解决
def longestCommonPrefix_4(strs):
import os
return os.path.commonprefix(strs)
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix_4(strs))