繁体   English   中英

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

[英]trying to check valid parentheses/bracket pairing

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

这是我的代码,当我输入“()”时它返回false

class Solution {
    public boolean isValid(String s) {
        if (s.length() < 2) {
            return false;
        }

        for (int i = 0; i < s.length() - 1; i++) {
            char char1 = s.charAt(i);
            char char2 = s.charAt(i + 1);
            if ((int) char1 != (int) char2) {
                return false;
            }
        }
        return true;
    }
}

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

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

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

如果您将左括号推入堆栈,然后在相应的右括号出现时将括号从堆栈中弹出 - 您应该在检查字符串的末尾有一个空堆栈。

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

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

如果您找到一个右括号,然后从堆栈中弹出,但没有找到相应的左括号,这也意味着括号没有正确配对。 对于这种情况,您可以使用一些代码,例如:

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

现在你只是想确保 2 个连续的字符不相同,但是 ")(" 和 "(}" 满足该条件并且不是有效的对。另外正如@luk2302 评论的那样,你应该每 2 迭代一次字符串中的字符。因此,不要在 for 循环中使用i++ ,而应使用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
)( 有效:假
(} 有效:假
()() 有效:true
()( 有效:假
(){}[] 有效:true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM