括号配对 区间DP 回文匹配
🍑 算法题解专栏
var code = "8ba817da-e6a1-4629-adf5-a2afba1b0da0"
🍑 括号配对
输入
[])
输出
1
🍑 f[ i ][ j ]:表示 i~j 区间内所有合法括号的长度
import java.util.Scanner;
public class Main
{
static int N = 110;
static String s;
static int[][] f = new int[N][N];// 0~n 之间所有合法括号的长度和
static boolean check(int l, int r)
{
char a = s.charAt(l);
char b = s.charAt(r);
if ((a == '(' && b == ')') || (a == '[' && b == ']'))
return true;
return false;
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
s = sc.next();
int n = s.length();
for (int len = 2; len <= n; len++)
{
for (int l = 0; l + len - 1 < n; l++)
{
int r = l + len - 1;
if (check(l, r))// s[l] 和 s[r] 匹配
f[l][r] = Math.max(f[l][r], f[l + 1][r - 1] + 2);
// 左右边界不匹配,分开两组求解
for (int k = l; k <= r; k++)// k 枚举左边选多少个
f[l][r] = Math.max(f[l][r], f[l][k] + f[k + 1][r]);
}
}
System.out.println(n - f[0][n - 1]);
}
}