区间型动态规划题,使用二维数组表示区间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 == ']';
    }
}