Go语言:基础练习--查找字符串数组中的最长公共前缀

Go语言:基础练习–查找字符串数组中的最长公共前缀

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

下文给出两种解法,一种是本人按照思路直接表达的写法,另一种是其他网友的写法,供对比学习。

写法一:
import "fmt"

func getLongestPrefix(words []string)  string{
	// 根据从短到长的顺序重新排列单词
	for i := 0; i < len(words); i++ {
		for j := i + 1; j < len(words); j++ {
			if len(words[i]) > len(words[j]) {
				words[i], words[j] = words[j], words[i]
			}
		}
	}
	//fmt.Println(words)
	prefix := ""
	flag := true
	// 遍历最短的单词与其他单词对比,相同则继续比较,出现不同直接退出比较
	for l := 0; l < len(words[0]); l++ {
		for k := 1; k < len(words); k++ {
			if words[0][l] != words[k][l] {// 一旦出现有一个单词的字母不一致,就不用再比较了
				flag = false
				break
			}
		}
		if flag {
			prefix += string(words[0][l])
		} else {
			break
		}
	}
	return prefix
}

func main() {
	words := []string{"flower","flow","flight"}
	fmt.Println(getLongestPrefix(words))
}
写法二:
func longestCommonPrefix(strs []string) string {
	prefix := strs[0]

	for i := 1; i < len(strs); i++ {
		for j := 0; j < len(prefix); j++ {
			if len(strs[i]) <= j || strs[i][j] != prefix[j] {  // 随着j的增加,单词的长度小于第一个单词时,这时说明这个短单词跟长单词的前部分完全一致,退出循环,否则已经触发后面一个条件了,对比有字母不同即退出循环,前缀为到这个字母前一个位置的切片;随着其他的单词的逐步对比,会不断更新prefix,最后返回结果。这个方法的好处是不用单独对单词长度排序,直接对比得到最长相同前缀。
				prefix = prefix[0:j]
				break
			}
		}
	}
	return prefix
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值