leetcode14 最长公共前缀-纵向比较

题目

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

示例

输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”

解析

纵向遍历:

func longestCommonPrefix(strs []string) string {
	if len(strs) == 0 {
		return ""
	}
	for i := 0; i < len(strs[0]); i++ { // 以字符串数组的第一个字符串为例
		for j := 1; j < len(strs); j++ { // 遍历字符串数组中的每个字符串
			if i == len(strs[j]) || strs[j][i] != strs[0][i] { // 两个终止条件:1.遍历到某个字符串的结尾;2.字符串该位置的值不相等
				return strs[0][:i]
			}
		}
	}
	return strs[0]
}

首先这道题没有特殊的算法,就是先遍历,但是遍历也可以氛围横向遍历和纵向遍历。纵向遍历上,可以以第一个字符串为参考,同时遍历所有字符串的每个字符,直到遇到某个字符串的结尾或者某两个字符不匹配则终止。

横向遍历:

func longestCommonPrefix(strs []string) string {
    if len(strs) == 0 {
        return ""
    }
    prefix := strs[0]
    count := len(strs)
    for i := 1; i < count; i++ {
        prefix = lcp(prefix, strs[i])
        if len(prefix) == 0 {
            break
        }
    }
    return prefix
}

func lcp(str1, str2 string) string {
    length := min(len(str1), len(str2))
    index := 0
    for index < length && str1[index] == str2[index] {
        index++
    }
    return str1[:index]
}

横向遍历上,可以选择最短的字符串(但是还得去找到哪个字符串最短,
不划算),或者第一个字符串作为参照物,遍历字符串中的每个字符传,比较他俩的最长公共前缀,得出来的结果再去和下一个字符串来进行比较。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值