目录
题目描述
思路
实现
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 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)) // flvar strs2 = []string{"dog", "racecar", "car"}fmt.Println(longestCommonPrefix(strs2)) //var strs3 = []string{"hello", "happy", "happy"}fmt.Println(longestCommonPrefix(strs3)) // hvar strs4 = []string{"ab", "a"}fmt.Println(longestCommonPrefix(strs4)) // a
提交结果