欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode的golang实现【0014】最长公共前缀

程序员文章站 2024-03-02 20:36:40
...

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

题解

1、垂直扫描
比较每个字符相同的位置,判断如果当前位置是该字符串的末尾或当前字符串的元素不相等,返回索引位置的字符串

func longestCommonPrefix(strs []string) string {
	if len(strs) == 0 {
		return ""
	}
	var index int
	for index < len(strs[0]) {
		ch := strs[0][index]
		for j := 1; j < len(strs); j++ {
			if index >= len(strs[j]) || strs[j][index] != ch {
				return strs[0][:index]
			}
		}
		index++
	}
	return strs[0][:index]
}

leetcode的golang实现【0014】最长公共前缀
时间复杂度:O(n2),空间复杂度:O(1)

2、横向扫描
比较第一个和第二个字符串的相同前缀,然后拿这个前缀和第三个字符串比较

func longestCommonPrefix(strs []string) string {
	if len(strs) == 0 {
		return ""
	}
	var prefix = strs[0]
	for i := 1; i < len(strs); i++ {
		for strings.Index(strs[i], prefix) != 0 {
			prefix = prefix[:len(prefix)-1]
			if len(prefix) == 0 {
				return ""
			}
		}
	}
	return prefix
}

leetcode的golang实现【0014】最长公共前缀
时间复杂度:O(n2),空间复杂度:O(1)

相关标签: go leetcode