有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java最小括号反转

给定一个仅由“}”和“{”组成的字符串表达式。该表达式可能不平衡。您需要找到使表达式平衡所需的最小括号反转数。 如果给定的表达式无法平衡,则返回-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;
    }
}

共 (1) 个答案

  1. # 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