每日一练-LeeCode-找出字符串中第一个匹配项下标

本文介绍了在Golang中使用两种方法解决字符串查找问题:暴力破解法通过逐字符对比,以及利用切片高效地查找子串首次出现的下标,讨论了它们的时间复杂度。
摘要由CSDN通过智能技术生成

题目

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:
输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。

提示:
1 <= haystack.length, needle.length <= 104
haystack 和 needle 仅由小写英文字符组成

解题

编程语言为GO

方法一:

暴力破解法,循环字符串每个字符,当字符等于匹配相等一个时就开始跟匹配项的每一个字符去对比,完全匹配的话就返回对应下标
时间复杂度: O(m*n)

func strStr(haystack string, needle string) int {
    if len(needle) > len(haystack) {
        return -1
    }
    for i := 0; i < len(haystack); i++ {
		// 剩下长度已经不足匹配项
		if len(haystack)-i < len(needle) {
			return -1
		}
		if needle[0] == haystack[i] {
			flag := true
			for j := 1; j < len(needle); j++ {
				if needle[j] != haystack[i+j] {
					flag = false
					break
				}
			}
			if flag {
				return i
			}
		}
	}
	return -1
}

方法二

golang切片,运用golang的切片功能,循环字符串,截取与匹配项长度相同的子字符串进行比较,相等则返回对应下标
时间复杂度: O(n)

func strStr(haystack string, needle string) int {
    if len(needle) > len(haystack) {
		return -1
	}
	m := len(haystack)
	n := len(needle)
	for i := 0; i <= m-n; i++ {
		if haystack[i:i+n] == needle {
			return i
		}
	}
	return -1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值