Skip to content

Commit f0d0d56

Browse files
committed
update: 28
1 parent bb26128 commit f0d0d56

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ This is the solutions collection of my LeetCode submissions, most of them are pr
2626
|22|[Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) | [JavaScript](./src/generate-parentheses/res.js)|Medium|
2727
|26|[Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/) | [JavaScript](./src/remove-duplicates-from-sorted-array/res.js)|Easy|
2828
|27|[Remove Element](https://leetcode.com/problems/remove-element/) | [JavaScript](./src/remove-element/res.js)|Easy|
29+
|28|[Implement strStr()](https://leetcode.com/problems/implement-strstr/) | [JavaScript](./src/implement-strstr/res.js)|Easy|
2930
|29|[Divide Two Integers](https://leetcode.com/problems/divide-two-integers/) | [JavaScript](./src/divide-two-integers/res.js)|Medium|
3031
|33|[Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) | [JavaScript](./src/search-in-rotated-sorted-array/res.js)|Medium|
3132
|34|[Search for a Range](https://leetcode.com/problems/search-for-a-range/) | [JavaScript](./src/search-for-a-range/res.js)|Medium|

‎src/implement-strstr/res.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* KMP
3+
* @param {string} haystack
4+
* @param {string} needle
5+
* @return {number}
6+
*/
7+
var strStr = function(haystack, needle) {
8+
const hlen = haystack.length;
9+
const nlen = needle.length;
10+
if (!nlen) return 0;
11+
if (!hlen) return -1;
12+
13+
let FSM = new Array(nlen);
14+
let X = 0, match = 0;
15+
for (let i = 0; i < nlen; i++) {
16+
match = needle[i].charCodeAt();
17+
FSM[i] = new Array(256);
18+
for (let j = 0; j < 256; j++) {
19+
FSM[i][j] = FSM[X][j] || 0;
20+
}
21+
22+
FSM[i][match] = i + 1;
23+
if (i > 0) {
24+
X = FSM[X][match];
25+
}
26+
}
27+
28+
let state = 0;
29+
for (let i = 0; i < hlen; i++) {
30+
state = FSM[state][haystack[i].charCodeAt()];
31+
if (state === nlen) {
32+
return i - nlen + 1;
33+
}
34+
}
35+
return -1;
36+
};

0 commit comments

Comments
 (0)