使用 Stack 算法的括号/方括号匹配

新手上路,请多包涵

例如,如果圆括号/括号匹配以下内容:

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

依此类推,但如果括号/方括号不匹配,则应返回 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));
}

原文由 Shuvo0o 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 399
2 个回答

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

这段代码稍微修改了你的代码,似乎可以正常工作:

 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();
}

原文由 Don Roby 发布,翻译遵循 CC BY-SA 3.0 许可协议

这段代码更容易理解:

 public static boolean CheckParentesis(String str)
{
    if (str.isEmpty())
        return true;

    Stack<Character> stack = new Stack<Character>();
    for (int i = 0; i < str.length(); i++)
    {
        char current = str.charAt(i);
        if (current == '{' || current == '(' || current == '[')
        {
            stack.push(current);
        }

        if (current == '}' || current == ')' || current == ']')
        {
            if (stack.isEmpty())
                return false;

            char last = stack.peek();
            if (current == '}' && last == '{' || current == ')' && last == '(' || current == ']' && last == '[')
                stack.pop();
            else
                return false;
        }

    }

    return stack.isEmpty();
}

原文由 Rafael Amsili 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题