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

go语言刷题:14. 最长公共前缀

程序员文章站 2024-03-23 10:40:22
...

申明:本文只用做自己学习记录

题目

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

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

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

代码

func longestCommonPrefix(strs []string) string {
	//定义边界条件1:当字符串列表长度为0的时候,表示无字符串,返回空字符
	if len(strs) == 0 {
		return ""
	}
	//定义边界条件2:当字符串列表长度为1时,重复字符串就是该字符本身
	if len(strs) == 1 {
		return strs[0]
	}
	//取出字符串列表中的第一个元素,作为对照字符串
	firststring := strs[0]
	//创建变量,用来存储最小字符串的长度
	var resultlength = 0
	//进行字符串列表循环,遍历字符串列表中的字符串
	for i := 1; i < len(strs); i++ {
		//对比两个字符串的长度,取较小的长度为对比循环次数
		if len(firststring) <= len(strs[i]) {
			resultlength = len(firststring)
		} else if len(firststring) > len(strs[i]) {
			resultlength = len(strs[i])
		}
		//初始化字符串重复个数
		j := 0
		//进行字符串对比
		for j < resultlength {
			//如果存在相同序号下字符串不相等,则跳出本次循环,j不加1
			if firststring[j] != strs[i][j] {
				break
			}
			//如果上述if不符合,说明该位置字符重复,j加1表示重复字符串个数多一位
			j++
		}
		//每对比一次字符串,保留当前的前j个重复的字符串
		//注:当本次循环的j小于上次循环的j时,重复字符串会截取最小值的字符串
		firststring = firststring[:j]
		//如果任意两个字符串之间的重复字符个数为零
		//则所有字符串之间的字符重复个数也为0,则返回空字符,函数结束
		if len(firststring) == 0 {
			return ""
		}
	}
	//循环结束,说明存在重复字符,返回重复的字符
	return firststring
}