区间型动态规划题,使用二维数组表示区间dp,让区间长度由1增大到lenth,计算出结果。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
int[][] dp = new int[len][len];
for (int i = 0; i < len; i++) {
dp[i][i] = 1;
}
int min;
for (int i = 1; i < len; i++) { // i 区间长度
for (int j = 0; j < len - i; j++) {
if (match(s.charAt(j), s.charAt(j + i))) {
min = dp[j + 1][j + i - 1];
} else {
min = Integer.MAX_VALUE;
}
for (int k = j; k < j + i; k++) {
min = Math.min(min, dp[j][k] + dp[k + 1][j + i]);
}
dp[j][j + i] = min;
}
}
System.out.println(dp[0][len - 1]);
}
private static boolean match(char left, char right) {
return left == '(' && right == ')'
|| left == '[' && right == ']';
}
}

京公网安备 11010502036488号