我正在尝试编写一个方法,它接受一串花括号,如果括号匹配则返回 true,否则返回 false。
这些是括号匹配的例子:
{ }
{ } { }
{{}}
{ { { } { { } } } }
这些是括号不匹配的例子:
{
} {
{{}
{ { } } } { }
我无法弄清楚这段代码背后的正确逻辑。我首先尝试了 length() mod 2,只有当结果为 0 时,该方法才会返回 true。但很明显,有一个错误,因为即使对于 } { 之类的字符串,它也会返回 true。我添加了一些代码来检测 {,如果没有找到 },它会自动返回 false。但我仍然收到错误。
这是我的代码:
public boolean bracketsMatch(String brackets)
{
if(!(brackets.length() % 2 == 0))
{
int i = 0;
int j = 0;
boolean check = false;
while(brackets.charAt(i) == '{')
{
for(int o = i + 1; o < brackets.length(); o++)
{
if(o == '}')
{
check = true;
break;
}
else
{
j++;
}
}
if(check == false)
return false;
i + = j;
}
return true;
}
else
{
return false;
}
}
这个问题的正确逻辑是什么,我犯了什么错误?谢谢!
最佳答案
使用计数器。当你找到 {
时增加它,当你找到 }
时减少它。如果在某个时候计数器为负,则字符串无效。如果在处理完所有字符后计数器为 0
,则返回 true。
好的
{ }
1 0
{ } { }
1 0 1 0
{ { } }
1 2 1 0
{ { { } { { } } } }
1 2 3 2 3 4 3 2 1 0
不行
{
1
} {
-1 <- no point checking farther
{ { }
1 2 1
{ { } } } { }
1 2 1 0 -1 <- no point checking farther
关于java - 如果括号匹配则返回 true 的 boolean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095578/