-
Notifications
You must be signed in to change notification settings - Fork 0
/
0028. Implement strStr().js
55 lines (50 loc) · 1.43 KB
/
0028. Implement strStr().js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Implement strStr().
//
// Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
//
// Example 1:
//
// Input: haystack = "hello", needle = "ll"
// Output: 2
//
// Example 2:
//
// Input: haystack = "aaaaa", needle = "bba"
// Output: -1
//
// Clarification:
//
// What should we return when needle is an empty string? This is a great question to ask during an interview.
//
// For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr() and Java's indexOf().
/**
* @param {string} haystack
* @param {string} needle
* @return {number}
*/
/** 1) Cheating */
const strStr1 = (haystack, needle) => {
if (needle == null || needle === '') return 0;
return haystack.indexOf(needle);
};
/** 2) Brute force */
const strStr2 = (haystack, needle) => {
if (needle == null || needle === '') return 0;
for (let i = 0; i < haystack.length - needle.length + 1; i++) {
if (haystack.substr(i, needle.length) === needle) return i;
}
return -1;
};
/** 3) Same to 2) */
const strStr = (haystack, needle) => {
if (needle == null || needle === '') return 0;
for (let i = 0; i < haystack.length - needle.length + 1; i++) {
for (let j = 0; j < needle.length; j++) {
if (haystack[i + j] !== needle[j]) break;
if (j === needle.length - 1) return i;
}
}
return -1;
};
/** 4) KMP */
// https://www.zhihu.com/question/21923021