File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string } s
3
+ * @param {string } t
4
+ * @return {string }
5
+ */
6
+ const minWindow = function ( s , t ) {
7
+ const counter = Array . from ( t ) . reduce ( ( obj , char ) => {
8
+ obj [ char ] = ( obj [ char ] || 0 ) + 1 ;
9
+ return obj ;
10
+ } , { } ) ;
11
+
12
+ let lettersToSatisfy = Object . keys ( counter ) . length ;
13
+ let minStart = 0 ;
14
+ let minEnd = Infinity ;
15
+
16
+ let start = 0 ;
17
+ for ( let end = 0 ; end < s . length ; end ++ ) {
18
+ // s[end]๊ฐ t์ ํฌํจ๋ ๋ฌธ์์ธ ๊ฒฝ์ฐ
19
+ if ( s [ end ] in counter ) {
20
+ counter [ s [ end ] ] -- ;
21
+
22
+ // ํด๋น ๋ฌธ์๊ฐ ๋ฒ์ ์์ ๋ชจ๋ ํฌํจ๋ ๊ฒฝ์ฐ
23
+ if ( counter [ s [ end ] ] === 0 ) {
24
+ lettersToSatisfy -- ;
25
+ }
26
+ }
27
+
28
+ // ํ์ฌ ๋ฒ์์ t ๋ด ๋ชจ๋ ๋ฌธ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ
29
+ while ( lettersToSatisfy === 0 ) {
30
+ // ๋ ์์ ๋ฒ์๋ก ์ ๋ต ๊ฐฑ์
31
+ if ( end - start < minEnd - minStart ) {
32
+ minStart = start ;
33
+ minEnd = end ;
34
+ }
35
+
36
+ // start ๋๋ฆฌ๊ธฐ
37
+ if ( s [ start ] in counter ) {
38
+ counter [ s [ start ] ] ++ ;
39
+ if ( counter [ s [ start ] ] > 0 ) {
40
+ lettersToSatisfy ++ ;
41
+ }
42
+ }
43
+
44
+ start ++ ;
45
+ }
46
+ }
47
+
48
+ return minEnd === Infinity ? '' : s . slice ( minStart , minEnd + 1 ) ;
49
+ } ;
50
+
51
+ // ์๊ฐ๋ณต์ก๋: O(m) (m: s.length)
52
+ // ๊ณต๊ฐ๋ณต์ก๋: O(1)
You canโt perform that action at this time.
0 commit comments