【问题标题】:Minimum bracket reversal最小括号反转
【发布时间】:2020-06-25 08:06:47
【问题描述】:

给定一个仅包含“}”和“{”的字符串表达式。表达可能不平衡。您需要找到使表达式平衡所需的最小括号反转数。 如果给定的表达式不能平衡,则返回 -1。

下面的代码在 (input= }{) 上有错误的输出。我的代码返回 -1。但输出应该是 2。我无法理解包含哪些测试用例。请给出一些建议或更改以产生所需的输出

import java.io.*;
public class Solution {

    public static int countBracketReversals(String input){
        Stack<Character> stk=new Stack<>();
        char c1; char c2;
        int c=0;
        int l=input.length();
        for(int i=0;i<l;i++)
        {
            if(input.charAt(i)=='{')
            {
                stk.push(input.charAt(i));
            }
            if(input.charAt(i)=='}')
            {
                if(stk.isEmpty())
                {
                    stk.push(input.charAt(i));
                }
                if(stk.peek()=='{')
                {
                    stk.pop();
                }
                if(stk.peek()=='}')
                {
                    stk.push(input.charAt(i));
                }
            }
          
        }
        int a=stk.size();
        if(a%2==0)
        {
           while(!stk.isEmpty())
         {
            c1= stk.pop();
            c2= stk.pop();
            
            if(c1==c2)
            {
                c=c+1;
            }
            if(c1=='}' && c2=='{')
            {
                c=c+2;
            }
         }
        }
        else
        {
         c=-1;
        }
      return c;
    }
}

【问题讨论】:

    标签: java stack


    【解决方案1】:

    由于在处理单个括号时会处理匹配的括号,因此保留在堆栈中的括号字符都需要反转。因此,输出必须是堆栈的大小stk.size()

    您的处理代码中存在错误。在检查堆栈是否为空之后,您必须使用else if 而不是if,否则将在空堆栈上调用stk.peek()

    if(stk.isEmpty()) {
       stk.push(input.charAt(i));
    } else if(stk.peek()=='{') {
       stk.pop();
    } else if(stk.peek()=='}') {
        stk.push(input.charAt(i));
    }
    

    另一方面,我认为结果不能大于 2。它必须是 0 或 2。

    【讨论】:

    • 是的...我进行了上述更改..现在输出为 0.我认为输出应该是 2.既不为 0 也不大于 2...我认为在进行上述更改后仍有一些错误...
    • 我无法重现该问题。对于输入 }{,我得到的输出为 2,因为堆栈将同时具有 }{
    • 你能不能给你的代码,这样我就可以明白我的代码哪里出了问题!!
    • 给你 - Ideone code
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多