给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
示例 1:
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
提示:
1 <= haystack.length, needle.length <= 104
haystack
和needle
仅由小写英文字符组成
思路:
双指针,pre指针用于比较从哪个位置开始,after指针用于遍历比较字符串
代码:
/**
* @param {string} haystack
* @param {string} needle
* @return {number}
*/
var strStr = function (haystack, needle) {
let pre = 0,
after = 0;
while (after < needle.length && pre < haystack.length) {
// pre代表需要从哪里开始比较
if (haystack[after + pre] === needle[after]) {
after++;
} else {
// 如果发现不想等应该剔除掉haystack之前的字符
pre++;
// 不相等剔除后,重新开始便利after
after = 0;
}
}
return after === needle.length ? pre : -1;
};
标签:pre,after,下标,needle,28,JS,字符串,打卡,haystack
From: https://blog.51cto.com/u_16101563/9028232