算法题系列10·最长公共前缀

目录

题目描述

思路

实现


 

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

示例 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

提交结果

算法题系列10·最长公共前缀_第1张图片

 

 

你可能感兴趣的:(算法&数据结构,算法)