java - 使用堆栈算法进行括号/括号匹配

标签 java stack parentheses

例如,如果括号/括号在以下匹配:

({})
(()){}()
()

以此类推,但如果括号/括号不匹配,则应返回 false,例如:

{}
({}(
){})
(()

等等。你能检查一下这个代码吗?提前致谢。

public static boolean isParenthesisMatch(String str) {
    Stack<Character> stack = new Stack<Character>();

    char c;
    for(int i=0; i < str.length(); i++) {
        c = str.charAt(i);

        if(c == '{')
            return false;

        if(c == '(')
            stack.push(c);

        if(c == '{') {
            stack.push(c);
            if(c == '}')
                if(stack.empty())
                    return false;
                else if(stack.peek() == '{')
                    stack.pop();
        }
        else if(c == ')')
            if(stack.empty())
                return false;
            else if(stack.peek() == '(')
                    stack.pop();
                else
                    return false;
        }
        return stack.empty();
}

public static void main(String[] args) {        
    String str = "({})";
    System.out.println(Weekly12.parenthesisOtherMatching(str)); 
}

最佳答案

您的代码在处理“{”和“}”字符时有些困惑。它应该与您处理 '(' 和 ')' 的方式完全平行。

这段代码稍加修改,似乎可以正常工作:

public static boolean isParenthesisMatch(String str) {
    if (str.charAt(0) == '{')
        return false;

    Stack<Character> stack = new Stack<Character>();

    char c;
    for(int i=0; i < str.length(); i++) {
        c = str.charAt(i);

        if(c == '(')
            stack.push(c);
        else if(c == '{')
            stack.push(c);
        else if(c == ')')
            if(stack.empty())
                return false;
            else if(stack.peek() == '(')
                stack.pop();
            else
                return false;
        else if(c == '}')
            if(stack.empty())
                return false;
            else if(stack.peek() == '{')
                stack.pop();
            else
                return false;
    }
    return stack.empty();
}

关于java - 使用堆栈算法进行括号/括号匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874176/

相关文章:

java - 如何将多个 SLF4J 绑定(bind)排除到 LOG4J

java - Spring 3 : disable SpEL evaluation of a bean property value?

java - 检查有效的重载

java - 部署 war 文件 javax.servlet 未找到的 Tomcat 错误

html - 在 HTML 类中使用括号可以吗?

Lua:用括号括起来时类变量的 bool 转换的解决方法

c++ - 传承精选功能

gcc - 为什么 GCC 在分配一个没有后续函数调用的大数组时将错误的值减去堆栈指针?

java 游荡和垃圾收集

Python:双括号有什么作用?