编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
#最简单的思路
公共前缀 从第一个位置开始一样的最长字符串
最普通的方法,扫描所有的字符串找到正确答案
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) == 0:
return ''
elif len(strs) ==1:
return strs[0]
else:
res1 = strs[0]
# print (res)
for tem in strs[1: len(strs)]:
res = ''
for j in range(min(len(res1), len(tem))):
if res1[j] == tem[j]:
res += res1[j]
continue
else:
break
if len(res) == 0:
break
res1 = res
return res
#换方法※※
利用find函数寻求一个字符串 在另外一个 字符串中的起始位置,
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) == 0:
return ''
res = strs[0]
# print (res)
for tem in strs[1:]:
while tem.find(res) != 0: #从0开始表示当前所含的字符串正好从第一个字母的位置开始,也就是最长公共前缀
res = res[0:len(res)-1] #如果不是0开始,代表还不是最长前缀,那么就将字符串进行缩短一位
if len(res) == 0:
break
return res
60 ms 13.3 MB
#比较骚的方法
比较取巧的方法,利用zip函数将每一个单词的同一位置的字母取出来,并利用set的特性看看是否为一个字母
为1个字母的话,代表同一位置为相同的数字
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
res = ''
for i in zip(*strs):
if len(set(i)) == 1:
res += i[0]
else:
break
return res