File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed
Find All Anagrams in a String Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ * @param {string } s
3
+ * @param {string } p
4
+ * @return {number[] }
5
+ */
6
+ var findAnagrams = function ( s , p ) {
7
+ const results = [ ] ;
8
+ const map = new Map ( ) ;
9
+ for ( const letter of p ) {
10
+ map . set ( letter , ( map . get ( letter ) || 0 ) + 1 ) ;
11
+ }
12
+
13
+ let needed = map . size ;
14
+ for ( let i = 0 , j = 0 ; j < s . length ; j ++ ) {
15
+ const left = s [ i ] , right = s [ j ] ;
16
+
17
+ if ( map . has ( right ) ) {
18
+ map . set ( right , map . get ( right ) - 1 ) ;
19
+ if ( ! map . get ( right ) ) needed -- ;
20
+ }
21
+
22
+ if ( j - i + 1 === p . length ) {
23
+ if ( ! needed ) results . push ( i ) ;
24
+ if ( map . has ( left ) ) {
25
+ const previous = map . get ( left ) ;
26
+ map . set ( left , map . get ( left ) + 1 ) ;
27
+ if ( map . get ( left ) > 0 && previous <= 0 ) needed ++ ;
28
+ }
29
+ i ++ ;
30
+ }
31
+ }
32
+ return results ;
33
+ } ;
You can’t perform that action at this time.
0 commit comments