点击上方“Python学习开发”,选择“加为星标”
第一时间关注Python技术干货!
题目名称最长公共前缀
题目要求
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
注意:所有输入只包含小写字母 a-z 。
解题思路
首先我们要知道什么是前缀,简单理解,前缀就是字符串开头的部分字母。前缀的长度也是不固定。比如单词flower,它的前缀可以是f,fl,flo,flow,flowe,flower。单词fly的前缀就是,f,fl,fly。只要从头开始数就可以了,但是我们要求是多个字符串之间的公共前缀,那么我们就要找到他们各自的前缀,以及公众的部分。分析发现flower和fly相同的前缀有f和fl。但是我们需要的是最长的前缀所以答案就是fl.
代码分析
Python Version
from typing import List
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) == 0:
return ""
prefix = strs[0] #把第一个字符串当做前缀
for i in range(len(strs)):
# find会返回prefix在字符串的位置。如果是0那么可以说明是前缀。
while strs[i].find(prefix) != 0:
prefix = prefix[:-1] #从后面开始减少一个看看
if not prefix:
return ""
return prefix
if __name__ == "__main__":
s= Solution()
input = ["flower","flow","flight"]
print(s.longestCommonPrefix(input))
除此之外,根据Python的语法特征,我们可以使用zip来解决这个问题。
#根据Python的特效
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
s = ""
print("*strs is ",*strs)
#通过zip和解包strs可以对这几组字符串同时迭代。
for i in zip(*strs):
print("i",i)
#根据set的特征,如果对元素去重之后个数为1那么可以得知,这几个元素是相等,否则跳出循环,因为上一组就是我们需要找的元素了。
if len(set(i)) == 1:
s += i[0]
else:
break
return s
Go Version
package main
import(
"fmt"
"strings"
)
func longestCommonPrefix(strs []string) string {
if len(strs) == 0 {
return ""
}
prefix := strs[0]
for _,value:=range strs {
for strings.Index(value,prefix)!=0{
prefix = prefix[0:len(prefix)-1]
if prefix==""{
return ""
}
}
}
fmt.Println(prefix)
return prefix
}
func main(){
l:=[]string{"flower","flow","flight"}
longestCommonPrefix(l)
}
推荐阅读
添加微信[gopython3].回复:回复Go或者Python加对应技术群。