最长公共前缀
题目:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
最长公共前缀,顾名思义,找出所有字符串的公共的前缀。右两种解法,
- 找出最短的那个字符串,然后挨个比较前缀。
- 两两挨个比较,类似map reduce里的操作,两个比对以下,找出公共前缀,再拿这个前缀和下一个字符串比对。
比较过程中,只要出现两个字符串没有相同的,就可以提前退出。
以下代码采用golang编写
func longestCommonPrefix(strs []string) string {
// 老样子,边界条件不能少
if len(strs) == 0 {
return ""
}
if len(strs) == 1 {
return strs[0]
}
// length := len(strs)
common := strs[0]
// prefix := ""
var last int
for i:= 1; i < len(strs); i++{
// minL := min(len(common), len(strs[i]))
for j:=1; j <= min(len(common), len(strs[i])); j++ {
// fmt.Printf("prefix: %s, to compare: %s\n", common[:j], strs[i][:j])
if common[:j] == strs[i][:j] {
last++
}
}
// 只要有一次没找到,那么最长前缀就是空字串""
if last > 0 {
common = common[:last]
last = 0
} else {
common = ""
break
}
}
return common
}
func min(a, b int) int {
if a > b {
return b
} else {
return a
}
}