20. 有效的括号

2021-08-26  本文已影响0人  gykimo

题目:https://leetcode-cn.com/problems/valid-parentheses/
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

我的方法一:栈

如果是左括号那么压栈,如果是右括号,然后比较和栈顶的左括号是否是一对,如果不是,那么无效

边界条件

这个题比较简单,主要需要考虑几个边界情况

  1. 可能出现右括号时,栈为空,说明没有对应的左括号,不合法
  2. 当遍历完了所有的括号后,可能栈不为空,说明左括号的数量多于右括号,也不合法

代码

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        int n = s.size();
        const char* str = s.c_str();

        for(int i = 0; i < n; i++) {
            if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
                stk.push(str[i]);
            }else{
                if(s.empty()){
                    return false;
                }
                if (str[i] == ')'){
                    if(stk.top() != '('){
                        return false;
                    }else{
                        stk.pop();
                    }
                }else if (str[i] == '}'){
                    if(stk.top() != '{'){
                        return false;
                    }else{
                        stk.pop();
                    }
                }else if (str[i] == ']'){
                    if(stk.top() != '['){
                        return false;
                    }else{
                        stk.pop();
                    }
                }
            }
        }

        return stk.empty();
    }
};

其他方法

优化点,判断是否是偶数

如果是奇数,肯定不合法,所以一个很好的优化

上一篇下一篇

猜你喜欢

热点阅读