概述
在本教程中,我们将看到在一个给定的字符串中寻找子串的最简单方法。请注意,这可能不是最有效的策略。
该策略将是
- 匹配从给定字符串中的每个索引开始的子串
这种方法的总体时间复杂度为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