#include <bits/stdc++.h>
#include <climits>
using namespace std;
const int N = 101;
string str;
int dp[N][N];
bool check(char a,char b){
return (a=='('&&b==')') || (a=='['&&b==']');
}
int main(){
cin>>str;
int n = str.size();
str = ' ' + str;
for(int i = 1;i<=n;i++) dp[i][i] = 1;
for(int i = 1;i<n;i++){
for(int j = 1;j+i<=n;j++){
int k = j + i;
dp[j][k] = INT_MAX;
if(check(str[j],str[k])) {
dp[j][k] = min(dp[j][k],dp[j+1][k-1]);
}
for(int k2 = j;k2<k;k2++){
dp[j][k] = min(dp[j][k],dp[j][k2]+dp[k2+1][k]);
}
}
}
cout<<dp[1][n];
return 0;
}
只有一个的时候需要多加一个才能匹配,如果str[j]==str[k],那么dp[j][k] = min(dp[j][k],dp[j+1][k-1]),否则 dp[j][k] = min(dp[j][k],dp[j][k2]+dp[k2+1][k]);
#牛客春招刷题训练营#https://www.nowcoder.com/discuss/727521113110073344

京公网安备 11010502036488号