区间dp2

package com.zhang.reflection.面试.算法模版.动态规划;
import java.util.Scanner;
/**
 * 给定一个由 '[' ,']','(',‘)’ 组成的字符串,请问最少插入多少个括号就能使这个字符串的所有括号左右配对。
 * 例如当前串是 "([[])",那么插入一个']'即可满足。
 *
 * ([[])
 * 1
 */
public class 区间dp {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        int[][] dp=new int[s.length()][s.length()];
        //dp[i][j]表示在i,j区间上需要添加的最小的括号数量。
        for(int i=0;i<s.length();i++){
            dp[i][i]=1;
        }
        int min;
        for(int i=1;i<=s.length();i++){
            for(int j=0;j<s.length()-i;j++){
                if((s.charAt(j)=='('&&s.charAt(i+j)==')')||(s.charAt(j)=='['&&s.charAt(i+j)==']')){
                    min=dp[j+1][i+j-1];
                }else{
                    min=Integer.MAX_VALUE;
                }
                for(int k=j;k<i+j;k++){
                    min=Math.min(min,dp[j][k]+dp[k+1][i+j]);
                }
                dp[j][i+j]=min;
            }
        }
        System.out.println(dp[0][s.length()-1]);
    }
}
全部评论

相关推荐

吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务