我目前正在尝试提供一个扫描字符串的代码 并检查每行上是否有偶数个开括号和右括号。如果是这样,它将返回true。 (请原谅格式化不正确,但除非我将其标识为代码,否则无法正确形成示例)
{} // The code would return true
{{}}
{}{}
{{{}{{}}}}
} // The code would return false
{}
}}{
{{{}{}
到目前为止我尝试了什么:
public boolean bracketsMatch(String brackets)
{
int lb = 0;
int rb = 0;
int i = 0;
while (brackets.charAt(i) == '{' || brackets.charAt(i) == '}' || brackets.charAt(i) == '')
{
if (brackets.charAt(i) == '{')
{
lb += 1;
}
if (brackets.charAt(i) == '}')
{
rb += 1;
}
if (brackets.charAt(i) == '')
{
if (lb / rb == 2)
{
// Is it possible to get the code scan the next line to next line?
// need an extra statement here for ^^ before I can place the if statement below
if (bracket.charAt(i + 1) == '')
{
return true;
}
}
else
{
return false;
}
}
i++
}
}
我提前为任何有经验的程序员道歉,因为这将是一个低效的噩梦。一般来说,我对编程比较陌生。我试图让代码检查左括号(lb)和右括号(rb)的数量。每当代码变为空字符串时,它将lb除以rb。如果代码不等于2,则代码将返回false。我可能在这段代码中有十几个错误,但我想知道是否有任何方法让代码进入下一行扫描下一组括号。感谢您提前提供任何帮助。
编辑1:
public boolean bracketsMatch(String brackets)
{
int balance = 0;
for (int i = 0; i < brackets.length(); i++)
{
char value = brackets.charAt(i);
if (value == '{')
{
balance += 1;
}
else if (value == '}')
{
balance -= 1;
}
}
if (balance != 0)
{
return false;
}
else
{
return true;
}
}
答案 0 :(得分:3)
这不会编译,因为''
是无效的字符文字:
if (brackets.charAt(i + 1) == '')
您目前计算开启和关闭括号的方法,
并检查lb / rb
的值不会产生正确的结果。
您不需要计算右括号。您只需计算开括号,并在关闭时减少该数量。
这是您可以使用的算法草图, 我希望不要破坏这项运动:
作为附加代码审核说明,这在很多方面都很糟糕:
if (brackets.charAt(i) == '{') { // ... } if (brackets.charAt(i) == '}') { // ... }
什么不好:
brackets.charAt(i)
。调用一次并将结果保存在变量中。if
条件是排他性的:如果第一个条件为真,则第二个条件为真,所以评估它是没有意义的。第二个条件应为if else
而不是if
。而不是if-else链,switch
在这里可能会更有趣。brackets
,而是将其称为更通用的内容。如果实际输入是&#34; {something}&#34 ;?然后它不仅仅包含括号,但算法的工作方式也相同。称之为括号会产生误导。答案 1 :(得分:1)
您可以使用Java Stack类[因为它表示对象的List-In-First-Out堆栈]。您可以使用Stack类的push和pop方法。这是实施。
public class BracketMatching {
public static boolean bracketMatch(String input){
Stack<Character> st = new Stack<>();
for(char c : input.toCharArray()){
if( c == '{')
st.push(c);
else if(c == '}'){
if(st.isEmpty())
return false;
st.pop();
}
}
if(st.isEmpty())
return true;
return false;
}
public static void main(String[] args){
String input1 = "{}{{}}{}{}{{{}{{}}}}";
String input2 = "}{}}}{{{{}{}";
System.out.println(bracketMatch(input1));
System.out.println(bracketMatch(input2));
}
}