美文网首页
括号匹配

括号匹配

作者: 抬头挺胸才算活着 | 来源:发表于2021-09-19 16:00 被阅读0次

这道题不同于LC921. 使括号有效的最少添加,这里是两种括号。

dp,f[i][j]表示从i位到j位的序列变为合法序列最少添加多少个字符。
如果匹配st[s]与st[e]匹配,那么f[s][e] = f[s + 1][e - 1];否则f[s][e] = f[s][k] + f[k + 1][e];
需要从右下角,并且从左往右数

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < n; i++) {
            String line = sc.nextLine();
            System.out.println(leastKuohao(line));
        }
    }

    public static int leastKuohao(String s) {
        int n = s.length();

        int[][] dp = new int[n][n];
        for (int i = 0; i < n; i++) {
            dp[i][i] = 1;
        }

        for (int i = 0; i < n - 1; i++) {
            dp[i][i+1] = isMatch(s.charAt(i), s.charAt(i+1)) ? 0 : 2;
        }

        for (int start = n - 1; start >= 0; start--) {
            for (int last = start + 2; last < n; last++) {
                int min1 = Integer.MAX_VALUE;
                if (isMatch(s.charAt(start), s.charAt(last))){
                    min1 = dp[start + 1][last - 1];
                }
                // 注意这里不能用else,两端匹配的情况下,也可能用分成两半的更小。
                int min2 = Integer.MAX_VALUE;
                for (int i = start; i < last; i++) {
                    min2 = Math.min(min2, dp[start][i] + dp[i+1][last]);
                }

                dp[start][last] = Math.min(min1, min2);
            }
        }

        return dp[0][n-1];
    }

    public static boolean isMatch(char c1, char c2) {
        return (c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']');
    }

相关文章

  • 3. 一些算法问题

    1. 括号匹配问题 算法:括号匹配问题 - 简书 C程序括号匹配检查 - Jason ZHANG的博客 - CSD...

  • 栈、队列解决问题

    栈解决括号匹配问题 一个字符串中包含小括号、中括号、大括号,判断该字符串中的括号是否匹配 ()()[]{} 匹配...

  • Python爬虫 使用正则表达式匹配邮箱和括号中的内容

    匹配邮箱 匹配括号

  • 括号匹配

  • 括号匹配

    检查一段C语言代码的小括号( )、 中括号 [ ] 和大括号{ } 是否匹配。

  • 括号匹配

    这道题不同于LC921. 使括号有效的最少添加,这里是两种括号。 dp,f[i][j]表示从i位到j位的序列变为合...

  • 括号匹配

    题目:假设表达式中允许包含两种括号:圆括号与方括号,其嵌套顺序随意,即() 或者[([][])] 都是正确的。而这...

  • 盘点c语言学习中易犯得八大错误

    初学者常犯的错误是: 1:分号忘记 2:大括号不匹配,中括号不匹配,小括号不匹配(你应该先打括号,再填入内容:切记...

  • chap3-栈和队列

    括号匹配问题 // 括号匹配,遇到 '\0' 结束// 遇到花、中、圆左括号进栈,遇到花、中、圆右括号检查栈顶元素...

  • 学习python之路--Day5 计算器

    需求 可以处理带括号的加减乘除运算 需求分析 匹配括号re.search('\(.*\)',a) 匹配最里面括号r...

网友评论

      本文标题:括号匹配

      本文链接:https://www.haomeiwen.com/subject/dewygltx.html