首页 > 【牛客题霸每日一题】NC52 括号序列 C++题解
头像
BNDSBilly
编辑于 2020-12-09 14:32
+ 关注

【牛客题霸每日一题】NC52 括号序列 C++题解

使用栈数据结构,遍历字符串,若遇到三种左括号,则直接压入栈内。若遇到三种右括号,检查栈顶元素是否为对应的左括号,若不是,说明不匹配,返回 false;若匹配,则将栈顶元素弹出,相当于两个括号匹配一起删除。
遍历字符串后,为了应对类似 "((((((" 的输入,要判断栈是否为空,若不为空说明有的左括号还未被匹配,返回 false
若以上不匹配情况均未发生,说明整个字符串满足匹配关系,返回 true 即可。
代码如下:
class Solution {
public:
    bool isValid(string str) {
        stack<char> s;
        for(char c : str) {
            if(c == '(' || c == '{' || c == '[') s.push(c);
            else if(c == ')') {
                if(!s.empty() && s.top() == '(') s.pop();
                else return false;
            }
            else if(c == ']') {
                if(!s.empty() && s.top() == '[') s.pop();
                else return false;
            }
            else if(c == '}') {
                if(!s.empty() && s.top() == '{') s.pop();
                else return false;
            }
        }
        if(!s.empty()) return false;
        return true;
    }
};


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐