LeetCode 28.实现strStr()
实现strStr()
给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
输入:haystack = "sadbutsad", needle = "sad" |
方法:KMP算法
算法思路:
-
构建
next
数组。next
数组是前缀表,记录下标i
之前(包括i
)的字符串中,有多大长度的相同前缀后缀。int i = 1; //i,j两个指针
int j = 0;
int[] next = new int[n];
while (i < n) {
if (needle.charAt(i) != needle.charAt(j) && j != 0) {
j = next[j - 1]; //当i,j指针所指不相等,且j != 0,则j跳到前一位记录的下标
} else if (needle.charAt(i) != needle.charAt(j) && j == 0) {
next[i] = 0; //当i,j指针所指不相等,且j == 0,记录next[i] = 0
i++;
} else if (needle.charAt(i) == needle.charAt(j)) {
next[i] = j + 1; //当i,j指针所指相等,记录next[i] = j + 1,i和j后移一位
i++;
j++;
}
} -
根据
next
数组遍历hayStack
和needle
字符串。
代码实现:
class Solution { |
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Abacteria的学习小站!