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 楼答案
由于在处理单个括号时处理匹配的括号,因此堆栈中保留的括号字符都需要反转。因此,输出必须是堆栈的大小
stk.size()
处理代码中有一个错误。在检查堆栈是否为空后,必须使用
else if
而不是if
,否则stk.peek()
将在空堆栈上调用另一方面,我认为结果不能大于2。它必须是0或2