File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string } s
3
+ * @return {number }
4
+ */
5
+ var minimumTime = function ( s ) {
6
+
7
+ const { max, min } = Math
8
+
9
+ let n = s . length ;
10
+ const l = Array . from ( { length : n + 1 } , ( ) => Array ( 2 ) . fill ( 0 ) )
11
+ const r = Array . from ( { length : n + 1 } , ( ) => Array ( 2 ) . fill ( 0 ) )
12
+ for ( let i = 0 ; i < n ; i ++ ) l [ i ] [ 0 ] = l [ i ] [ 1 ] = r [ i ] [ 0 ] = r [ i ] [ 1 ] = 0 ;
13
+ if ( s [ 0 ] == '1' ) {
14
+ l [ 0 ] [ 0 ] = 1 ;
15
+ l [ 0 ] [ 1 ] = 2 ;
16
+ }
17
+ for ( let i = 1 ; i < n ; i ++ ) {
18
+ if ( s [ i ] == '0' ) {
19
+ l [ i ] [ 0 ] = l [ i - 1 ] [ 0 ] ;
20
+ l [ i ] [ 1 ] = l [ i - 1 ] [ 1 ] ;
21
+ } else {
22
+ l [ i ] [ 0 ] = i + 1 ;
23
+ l [ i ] [ 1 ] = min ( l [ i - 1 ] [ 0 ] , l [ i - 1 ] [ 1 ] ) + 2 ;
24
+ }
25
+ }
26
+ if ( s [ n - 1 ] == '1' ) {
27
+ r [ n - 1 ] [ 0 ] = 1 ;
28
+ r [ n - 1 ] [ 1 ] = 2 ;
29
+ }
30
+ for ( let i = n - 2 ; i >= 0 ; i -- ) {
31
+ if ( s [ i ] == '0' ) {
32
+ r [ i ] [ 0 ] = r [ i + 1 ] [ 0 ] ;
33
+ r [ i ] [ 1 ] = r [ i + 1 ] [ 1 ] ;
34
+ } else {
35
+ r [ i ] [ 0 ] = n - i ;
36
+ r [ i ] [ 1 ] = min ( r [ i + 1 ] [ 0 ] , r [ i + 1 ] [ 1 ] ) + 2 ;
37
+ }
38
+ }
39
+ let ans = n ;
40
+ for ( let i = - 1 ; i < n ; i ++ ) {
41
+ let cost = 0 ;
42
+ if ( i != - 1 ) cost += min ( l [ i ] [ 0 ] , l [ i ] [ 1 ] ) ;
43
+ if ( i != n - 1 ) cost += min ( r [ i + 1 ] [ 0 ] , r [ i + 1 ] [ 1 ] ) ;
44
+ ans = min ( ans , cost ) ;
45
+ }
46
+ return ans ;
47
+ } ;
You can’t perform that action at this time.
0 commit comments