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

简单思路

  1. 常规遍历比较,时间复杂度 O(m * n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var strStr = function (haystack, needle) {
for (let i = 0; i <= haystack.length - needle.length; ++i) {
let matches = true
for (let j = 0; j < needle.length; ++j) {
if (haystack[i + j] !== needle[j]) {
matches = false
break
}
}
if (matches) {
return i
}
}
return -1
}

优化

  1. KMP 算法,时间复杂度 O(m + n)