知识点:字符串
难度:简单
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例:
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
方法:循环比较
Golang:
func longestCommonPrefix(strs []string) string {
strNumber := len(strs)
//测试空切片
if strNumber == 0 {
return ""
}
//取得最小的字符串长度,即最大可能的公共前缀长度
maxPreLength := len(strs[0])
for x := 1; x < strNumber; x++ {
strLength := len(strs[x])
if strLength < maxPreLength {
if strLength == 0 {
//存在空字符串
return ""
}
maxPreLength = strLength
}
}
//获取相同部分的长度
i := 0
I:
for ; i < maxPreLength; i++ {
for j := 1; j < strNumber; j++ {
if strs[j][i] != strs[j-1][i] {
break I
}
}
}
return strs[0][0:i]
}
执行:
复杂度分析:
时间复杂度:O(S),S 是所有字符串中字符数量的总和。
最坏情况下,输入数据为 n 个长度为 m 的相同字符串,算法会进行 S=m∗n 次比较。可以看到最坏情况下,本算法的效率与算法一相同,但是最好的情况下,算法只需要进行n∗minLen 次比较,其中 minLen 是数组中最短字符串的长度。
空间复杂度:O(1)