|
| 1 | +/** |
| 2 | + * @param {string} s |
| 3 | + * @param {string} p |
| 4 | + * @return {number[]} |
| 5 | + */ |
| 6 | +var findAnagrams = function (s: string, p: string) { |
| 7 | + let map = new Map(); |
| 8 | + let result: number[] = []; |
| 9 | + let slideWindow = new Map(); |
| 10 | + |
| 11 | + for (var i = 0; i < p.length; i++) { |
| 12 | + if (map.get(p[i])) { |
| 13 | + map.set(p[i], map.get(p[i] + 1)); |
| 14 | + } else { |
| 15 | + map.set(p[i], 1); |
| 16 | + } |
| 17 | + } |
| 18 | + |
| 19 | + let right: number = 0; |
| 20 | + let left: number = 0; |
| 21 | + |
| 22 | + while (right < s.length) { |
| 23 | + if (map.get(s.charAt(right))) { |
| 24 | + if (slideWindow.get(s.charAt(right)) && map.get(s.charAt(right)) === 1) { |
| 25 | + left = Math.max(slideWindow.get(s.charAt(right)), left); |
| 26 | + } |
| 27 | + if (right - left + 1 === p.length) { |
| 28 | + result.push(left); |
| 29 | + left++; |
| 30 | + } |
| 31 | + } else { |
| 32 | + left = right + 1; |
| 33 | + slideWindow.clear(); |
| 34 | + } |
| 35 | + slideWindow.set(s.charAt(right), right + 1); |
| 36 | + right++; |
| 37 | + } |
| 38 | + return result; |
| 39 | +}; |
| 40 | + |
| 41 | +const ab = findAnagrams('cbaebabacd', 'abc'); |
| 42 | +const bc = findAnagrams('abab', 'ab'); |
| 43 | +console.log('ab', ab); |
| 44 | +console.log('bc', bc); |
0 commit comments