暴力解法
func strStr(haystack string, needle string) int {
//go 在字符串中,找指定子串下标的方法,有没有现成的函数
//for i := 0; i < len(haystack)-len(needle); i++ { //这里是<=不是<,因为两个len多出的长度1相减,抵消了
for i := 0; i <= len(haystack)-len(needle); i++ {
if strings.HasPrefix(haystack[i:], needle) {
return i
}
}
return -1
}
自己实现 startWith 函数
func hadPrefix(s, subS string) bool {
for i := 0; i < len(subS); i++ {
if s[i] != subS[i] {
return false
}
}
return true
}
优化
根本不需要 startWith,直接切片判断是否相等
func strStr(haystack string, needle string) int {
n, m := len(haystack), len(needle)
for i := 0; i <= n-m; i++ {
if haystack[i:i+m] == needle {
return i
}
}
return -1
}
这个可以用 KMP 算法,但是比较复杂,先不考虑