Java 编写一个方法,该方法接受一串花括号,如果括号匹配,则返回true;如果括号不匹配,则返回false’;T
我在CodeHS中处理这个问题,我必须编写一个方法,该方法接受一串花括号,如果括号匹配,则返回true;如果括号不匹配,则返回false 这是到目前为止我的代码,我不知道当左花括号和右花括号的数量相同时该怎么做,但它们只是不匹配,比如(}}{{)这个例子Java 编写一个方法,该方法接受一串花括号,如果括号匹配,则返回true;如果括号不匹配,则返回false’;T,java,Java,我在CodeHS中处理这个问题,我必须编写一个方法,该方法接受一串花括号,如果括号匹配,则返回true;如果括号不匹配,则返回false 这是到目前为止我的代码,我不知道当左花括号和右花括号的数量相同时该怎么做,但它们只是不匹配,比如(}}{{)这个例子 public boolean bracketsMatch(String brackets) { boolean result = true; int leftCtr = 0 ; //"{"; int rightCtr
public boolean bracketsMatch(String brackets)
{
boolean result = true;
int leftCtr = 0 ; //"{";
int rightCtr =0 ; // "}";
int count = 0;
for (int i=0; i<brackets.length(); i++)
{
char c = brackets.charAt(i);
if ( c == '{')
{
leftCtr++;
}
if (c =='}')
{
rightCtr++;
}
}
if (rightCtr==leftCtr)
{
result= true;
}
else
{
return false;
}
return result;
}
公共布尔括号匹配(字符串括号)
{
布尔结果=真;
int leftCtr=0;/“{”;
int rightCtr=0;/“}”;
整数计数=0;
对于(int i=0;i我认为最简单的方法就是保持一个计数,对于开括号递增,对于闭括号递减。然后使用以下规则:
如果计数一直低于0,则计数无效(即从未打开的结束括号)
如果结尾处的计数不是0,则该计数无效(即开括号过多)
考虑到这一点,您的代码将如下所示:
public boolean bracketsMatch(String brackets)
{
int count = 0;
for (int i=0; i< brackets.length(); i++)
{
char c = brackets.charAt(i);
if ( c == '{')
{
count++;
}
else if (c =='}')
{
count--;
}
// Process the first rule.
// Check if we have a negative count (i.e. close bracket without a matching opener).
// If we have a negative then we know the string is invalid, so we can stop processing and return (false) early.
if (count < 0)
{
return false;
}
}
// Process the second rule.
// If we got this far then we know there are no invalid close brackets, so now we need to just check to make sure we didn't have too many open brackets.
// Return true if everything matching (i.e. 0), otherwise false.
return count == 0;
}
公共布尔括号匹配(字符串括号)
{
整数计数=0;
对于(int i=0;i<方括号.length();i++)
{
字符c=括号。字符(i);
如果(c=='{')
{
计数++;
}
else如果(c=='}')
{
计数--;
}
//处理第一条规则。
//检查我们的计数是否为负数(即关闭支架,但没有匹配的开启器)。
//如果我们有一个负数,那么我们知道字符串是无效的,所以我们可以停止处理并提前返回(false)。
如果(计数<0)
{
返回false;
}
}
//处理第二条规则。
//如果我们走到这一步,那么我们知道没有无效的闭括号,所以现在我们需要检查一下,确保没有太多的开括号。
//如果所有内容都匹配(即0),则返回true,否则返回false。
返回计数==0;
}
已经Musefan给出了一个精彩的答案。下面是另一个实现。使用堆栈数据结构
public static boolean isBracketMatch(String str) {
Stack<Character> stack = new Stack<>();
char c;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (c == '{')
stack.push('}');
else if (c == '}') {
if (!stack.empty() && stack.peek() == c)
stack.pop();
else
return false;
}
}
return stack.empty();
}
public静态布尔值isBracketMatch(String str){
堆栈=新堆栈();
字符c;
对于(int i=0;i
相等比较rightCtr==leftCtr
应该在for-loop之外进行检查。非常感谢!@musefan-yup,刚刚做了。非常感谢。错误是左花括号和右花括号的数量相同,但它与}不匹配{{这个。@musefan yup,刚刚意识到并修复了它hahaOkay,这是有意义的,但我不明白它在类似}{{的情况下是如何工作的。{?谢谢你,因为即使它是}}{{那不是也等于零吗?因为它是-1-1+1+1吗?@CodingBat:是的,如果我们让它到达函数的末尾,它将等于零。这就是为什么我们在每个循环上检查负数。在您的示例中,第一个循环计数将是-1
,这意味着它无效。如果我们得到-1
第恩,我们提前退出函数,所以我们永远不会检查总计数,我们基本上停止处理字符串的其余部分。好的,我现在明白了,非常感谢你,祝你有一个美好的一天!这很好,但是当程序还需要处理多种括号,例如({和[.这个答案符合OP的要求。但对任何类型的括号实施它并不困难。:)