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