File tree 1 file changed +41
-0
lines changed 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * brainstorming:
4
+ * two pointer + hash table
5
+ *
6
+ * n = length of s
7
+ * m = length of t
8
+ * time complexity: O(n*n)
9
+ * space complexity: O(n)
10
+ */
11
+ var minWindow = function ( s , t ) {
12
+ const requiredMap = t . split ( "" ) . reduce ( ( map , char ) => {
13
+ map . set ( char , ( map . get ( char ) ?? 0 ) + 1 ) ;
14
+ return map ;
15
+ } , new Map ( ) ) ;
16
+ const requiredArray = [ ...requiredMap . entries ( ) ] ;
17
+ const map = new Map ( ) ;
18
+ const successRequired = ( ) =>
19
+ requiredArray . every ( ( [ key , value ] ) => map . get ( key ) >= value ) ;
20
+
21
+ let answer = "" ;
22
+ let start = 0 ;
23
+
24
+ for ( let i = 0 ; i < s . length ; i ++ ) {
25
+ if ( requiredMap . has ( s [ i ] ) ) map . set ( s [ i ] , ( map . get ( s [ i ] ) ?? 0 ) + 1 ) ;
26
+
27
+ while ( successRequired ( ) ) {
28
+ const now = s . slice ( start , i + 1 ) ;
29
+ answer = answer === "" || answer . length >= now . length ? now : answer ;
30
+
31
+ if ( map . has ( s [ start ] ) ) {
32
+ map . set ( s [ start ] , map . get ( s [ start ] ) - 1 ) ;
33
+ if ( map . get ( s [ start ] ) === - 1 ) map . delete ( s [ start ] ) ;
34
+ }
35
+
36
+ start ++ ;
37
+ }
38
+ }
39
+
40
+ return answer ;
41
+ } ;
You can’t perform that action at this time.
0 commit comments