1
1
public class Solution {
2
-
3
2
public int minCut (String s ) {
4
- final char [] S = s .toCharArray ();
5
- final int N = S .length ;
3
+ char [] S = s .toCharArray ();
6
4
7
- if (N == 0 ) return 0 ;
8
- if (N == 1 ) return 0 ;
9
- if (N == 2 ) return S [0 ] == S [1 ] ? 0 : 1 ;
5
+ if (S .length == 0 ) return 0 ;
10
6
11
- boolean [][] P = new boolean [N ][ N ];
7
+ boolean [][] P = new boolean [S . length ][ S . length ];
12
8
13
- for (int i = 0 ; i < N - 1 ; i ++){
14
- P [i ][i ] = true ;
15
- P [i ][i + 1 ] = S [i ] == S [i + 1 ];
16
- }
9
+ // len 1
10
+ Arrays .fill (P [1 - 1 ], true );
17
11
18
- P [N - 1 ][N - 1 ] = true ;
12
+ // len 2
13
+ for (int i = 0 ; i < S .length - 1 ; i ++){
14
+ P [2 - 1 ][i ] = S [i ] == S [i + 2 - 1 ];
15
+ }
19
16
20
- for (int j = 2 ; j < N ; j ++){
21
- for (int i = 0 ; i < j ; i ++){
22
- P [i ][j ] |= P [i + 1 ][j - 1 ] && S [i ] == S [j ];
17
+ // len 3 to max
18
+ for (int len = 3 ; len <= S .length ; len ++){
19
+
20
+ for (int i = 0 ; i < S .length - (len - 1 ); i ++){
21
+ P [len - 1 ][i ] = P [len - 1 - 2 ][i + 1 ] && S [i ] == S [i + len - 1 ];
23
22
}
24
23
}
25
24
26
-
27
- int mincut [] = new int [N + 1 ]; // i -> end
28
-
29
- for (int i = N - 2 ; i >= 0 ; i --){
30
-
31
- if (P [i ][N - 1 ]) {
32
- mincut [i ] = 0 ;
33
- } else {
34
- mincut [i ] = mincut [i + 1 ] + 1 ;
35
-
36
- for (int j = i + 1 ; j < N ; j ++){
37
- if (P [i ][j ]){
38
- mincut [i ] = Math .min (1 + mincut [j + 1 ], mincut [i ]);
25
+ int [] mincut = new int [S .length + 1 ];
26
+
27
+ mincut [0 ] = 0 ;
28
+ mincut [1 ] = 0 ;
29
+
30
+ for (int len = 2 ; len <= S .length ; len ++){
31
+
32
+ if (P [len - 1 ][0 ]){
33
+ mincut [len ] = 0 ;
34
+ }else {
35
+
36
+ mincut [len ] = mincut [len - 1 ] + 1 ;
37
+
38
+ for (int i = 1 ; i < len - 1 ; i ++){
39
+
40
+ if (P [len - i - 1 ][i ]){
41
+ mincut [len ] = Math .min (mincut [i ] + 1 , mincut [len ]);
39
42
}
40
43
}
41
- //mincut = Math.min(minCut(s.substring(i + 1)) + 1, mincut);
42
44
}
43
45
}
44
-
45
- return mincut [0 ];
46
46
47
+ return mincut [S .length ];
47
48
}
48
- }
49
+ }
0 commit comments