-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstrStr.js
More file actions
45 lines (35 loc) · 932 Bytes
/
strStr.js
File metadata and controls
45 lines (35 loc) · 932 Bytes
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
var strStr = function(haystack, needle) {
debugger;
if(needle.length === 0){
return 0;
}
var map = needle.split('').reduce((m, char) => {
m[char] = m[char] ? m[char] + 1 : 1;
return m;
}, {})
var n = haystack.length;
var n2 = needle.length;
var count = n2;
var start = 0;
var end = 0;
while(end < n){
diff = end - start;
var eChar = haystack[end];
if(map.hasOwnProperty(eChar)){
map[eChar]--;
count--;
}
end++;
if(count === 0) { return start };
if(diff === n2-1){
var charL = haystack[start];
if(map.hasOwnProperty(charL)){
map[charL]++;
count++;
}
start++;
}
}
return -1;
};
strStr('mississippi', 'issi');