试图检查有效的括号/括号配对

时间:2017-10-24 19:02:52

标签: java for-loop boolean character

给出一串单独的括号,括号等,如果配对正确,我试图返回true。 (有一些类似的问题,但它们涉及更复杂的东西,如数组,字符串中的其他字符等)

这是我的代码,当我输入"()"

时,它返回false
.6

任何帮助或建议都将不胜感激!

2 个答案:

答案 0 :(得分:2)

您可以使用stack来解决此问题。

假设您开始循环遍历字符串中的字符,并且您有一个堆栈......

如果您将相应的关闭括号显示在堆叠的开口支架上,然后从堆栈中弹出支架 - 您应该在检查字符串的末尾有一个空堆栈。

如果在字符串循环结束时堆栈为空,则所有括号都将配对。

如果堆栈为空并且还有更多要检查的字符(即循环未完成),则括号不会配对。

如果找到一个右括号然后从堆栈中弹出并且找不到相应的左括号,这也意味着括号未正确配对。在这种情况下,您可以使用以下代码:

private static boolean match(char fromStack, char next) {
    return fromStack == '[' && next == ']' || fromStack == '{' && next == '}' || fromStack == '(' && next == ')';
}

答案 1 :(得分:0)

现在你只是想确保连续2个字符不相同,但是")("和#34;(}"满足这个条件,不是@ luk2302注释,你应该迭代字符串中的每2个字符。所以你应该使用i++而不是在你的for循环中使用i+=2

但我认为另一种方法是使用正则表达式:

public boolean isValid(String s) {
    // if null, or its length is zero or odd then is automatically invalid
    if (s == null || s.length() == 0 || s.length() % 2 != 0) {
        return false;
    }

    return s.matches("(\\(\\)|\\{\\}|\\[\\])+");
}

此正则表达式将匹配"()"," {}"和" []" 1次或更多次。

以下是一些测试输出:

  

()有效:true
)(有效:false
(}有效:false
  ()()有效:true
()(有效:false
(){} []有效:   真