用Go(Golang)在给定的字符串中寻找子串的最简单方法

103 阅读1分钟

概述

在本教程中,我们将看到在一个给定的字符串中寻找子串的最简单方法。请注意,这可能不是最有效的策略。

该策略将是

  • 匹配从给定字符串中的每个索引开始的子串

这种方法的总体时间复杂度为O(mn),其中m 是子串的长度,n是输入字符串的大小。

我们的程序将返回给定子串开始的原始字符串中的索引。如果该子串在给定的字符串中不存在,则将返回-1。

例子

Input: "lion"
Substring: "io"
Output: 1

**"io "**存在于 **"lion "**中的第1位

另一个例子

"tus "不存在于"tub"中。

程序

以下是相同的程序。

package main

import "fmt"

func strStr(haystack string, needle string) int {
	runeHayStack := []rune(haystack)
	runeNeedle := []rune(needle)
	lenHayStack := len(runeHayStack)
	lenNeedle := len(runeNeedle)

	if lenNeedle == 0 && lenHayStack == 0 {
		return 0
	}

	if lenNeedle > lenHayStack {
		return -1
	}

	for i := 0; i <= lenHayStack-lenNeedle; i++ {
		k := i
		j := 0

		for j < lenNeedle {
			if runeHayStack[k] == runeNeedle[j] {
				k = k + 1
				j = j + 1
			} else {
				break
			}
		}

		if j == lenNeedle {
			return i
		}
	}

	return -1

}

func main() {
	output := strStr("lion", "io")
	fmt.Println(output)

	output = strStr("tub", "tus")
	fmt.Println(output)
}

输出

1
-1