File tree 1 file changed +39
-0
lines changed
scripts/algorithms/N/Number of Beautiful Partitions
1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Runtime: 21 ms (Top 82.3%) | Memory: 56.41 MB (Top 50.9%)
2
+
3
+ class Solution {
4
+ int mod = 1000000007 ;
5
+ boolean is [];
6
+ public int beautifulPartitions (String s , int K , int minLength ) {
7
+ is = new boolean [10 ];
8
+ is [2 ] = is [3 ] = is [5 ] = is [7 ] = true ;
9
+
10
+ int n = s .length ();
11
+ int a [] = new int [n + 1 ];
12
+ for (int i = 0 ; i < n ; i ++) a [i + 1 ] = s .charAt (i ) - '0' ;
13
+ if (!is [a [1 ]]) {
14
+ return 0 ;
15
+ }
16
+
17
+ long dp [][] = new long [n + 1 ][K + 1 ];
18
+ long m [] = new long [K + 1 ];
19
+ dp [0 ][0 ] = 1 ;
20
+
21
+ for (int i = 1 ; i <= n ; i ++) {
22
+ if (i >= minLength ) {
23
+ int idx = i - minLength ;
24
+ if (idx == 0 || (!is [a [idx ]] && (idx + 1 > n || is [a [idx + 1 ]]))) { // keep maximum
25
+ for (int k = 0 ; k <= K ; k ++) {
26
+ m [k ] += dp [idx ][k ];
27
+ m [k ] %= mod ;
28
+ }
29
+ }
30
+ }
31
+ if (is [a [i ]]) continue ;
32
+ for (int k = 1 ; k <= K ; k ++) {
33
+ dp [i ][k ] += m [k - 1 ];
34
+ dp [i ][k ] %= mod ;
35
+ }
36
+ }
37
+ return (int )(dp [n ][K ]);
38
+ }
39
+ }
You can’t perform that action at this time.
0 commit comments