📜  门|门CS 2012 |第 49 题(1)

📅  最后修改于: 2023-12-03 15:12:47.483000             🧑  作者: Mango

题目介绍:门|门CS 2012 |第 49 题

本题要求实现一个程序,判断一个由一些括号(包括小括号 (),中括号 [] 和大括号 {})组成的字符串是否匹配。

问题分析

在计算机科学中,使用栈(stack)数据结构来判断括号匹配问题。栈是一种先进后出的数据结构,它允许添加和移除元素。在本题中,我们可以通过栈来记录左括号,并在遇到右括号时进行匹配。

算法使用步骤:

  • 创建一个空栈S;
  • 从左到右扫描字符串,遇到左括号时,将其压入栈S中;
  • 遇到右括号时,弹出栈顶元素,与该右括号进行匹配;
  • 如果不匹配则判定失败;
  • 如果整个字符串扫描完后,栈不为空,则判定失败。
解法实现
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for x in s:
            if x == '(' or x == '{' or x == '[':
                stack.append(x)
            elif x == ')' and (not stack or stack[-1] != '('):
                return False
            elif x == '}' and (not stack or stack[-1] != '{'):
                return False
            elif x == ']' and (not stack or stack[-1] != '['):
                return False
            else:
                stack.pop()
        return not stack
class Solution {
    public boolean isValid(String s) {
        char[] stack = new char[s.length()];
        int top = -1;
        for (char x : s.toCharArray()) {
            if (x == '(' || x == '{' || x == '[') {
                stack[++top] = x;
            } else if (x == ')' && (top == -1 || stack[top] != '(')) {
                return false;
            } else if (x == '}' && (top == -1 || stack[top] != '{')) {
                return false;
            } else if (x == ']' && (top == -1 || stack[top] != '[')) {
                return false;
            } else {
                top--;
            }
        }
        return top == -1;
    }
}
使用说明

以上代码为 Python 和 Java 两种语言的解法实现,都通过 LeetCode 上的测试用例。可根据实际情况选择对应的语言实现。

输入样例:
[{}]({[]})
输出样例:
true
时间复杂度:
  • 时间复杂度为O(n),其中n为字符串s的长度。

谢谢阅读,祝你编程愉快!