【牛客】[编程题] 合法括号序列判断 C++

1.题目描述

链接:https://www.nowcoder.com/questionTerminal/d8acfa0619814b2d98f12c071aef20d4

对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。

测试样例: “(()())”,6 返回:true

测试样例: “()a()()”,7 返回:false

测试样例: “()(()()”,7 返回:false

2.思路分析

  1. 建栈,遍历字符串A,
  2. 遇到左括号入栈,右括号分情况
  3. 如果栈空的话,那就不匹配直接返回false
  4. 如果栈顶元素是左括号的话就出栈
  5. 其他情况直接入栈
  6. 最后判断如果栈空的话,那一定匹配返回true
  7. 否则返回false

3.代码实现

class Parenthesis {
public:
    bool chkParenthesis(string A, int n) {
        // write code here
        // 栈解决
        stack<char> s;
        // 遍历字符串A
        for(int i = 0; i < n; i++)
        {
            // 左括号入栈
            if(A[i] == '(')
                s.push(A[i]);
            else if(A[i] == ')')
            {
                // 判断为空的话不匹配,则直接出栈
                if(s.empty())
                    return false;
                // 栈顶是左括号直接出栈
                if(s.top() == '(')
                    s.pop();
                else 
                    // 其他直接入栈
                    s.push(A[i]);
            }
            else
                // 规避字符
                return false;
        }
        // 最后如果栈为空的话,就直接返回true,反之则不
        if(s.empty())
            return true;
        return false;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43967449/article/details/106667936