目录
题目描述
思路
实现
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。 提示: 1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成
思路
也没什么太多,核心如下:
既然是公共前缀,注意“公共”两个字,也就是说必然包含在每个字符串中,那么我们就瞄准第一个字符串为基准入手。
实现
func longestCommonPrefix(strs []string) string {
// 假设第一个元素为最长公共前缀,真实的最长公共前缀必定<=此值
longestCommonPrefix := strs[0]
loop:
for i := 0; i < len(longestCommonPrefix); i++ {
try := strs[0][i]
for j := 1; j < len(strs); j++ {
if len(strs[j]) == 0 {
longestCommonPrefix = ""
break loop
}
// 一旦出现不相等的时候,说明公共的前缀已经被打破了,不需要再遍历
if len(strs[j]) <= i || try != strs[j][i] {
longestCommonPrefix = strs[0][:i]
break loop
}
}
}
return longestCommonPrefix
}
验证
var strs1 = []string{"flower", "flow", "flight"}
fmt.Println(longestCommonPrefix(strs1)) // fl
var strs2 = []string{"dog", "racecar", "car"}
fmt.Println(longestCommonPrefix(strs2)) //
var strs3 = []string{"hello", "happy", "happy"}
fmt.Println(longestCommonPrefix(strs3)) // h
var strs4 = []string{"ab", "a"}
fmt.Println(longestCommonPrefix(strs4)) // a
提交结果