合法括号序列判断
题目来源
牛客网:合法括号序列判断
题目描述
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
示例1
输入
“(()())”,6
返回
true
示例2
输入
“()a()()”,7
返回
false
示例3
输入
“()(()()”,7
返回
false
思路分析
- 根据栈先进后出、后进先出的特性来保存括号序列
- 遍历字符串,遇到左括号则进行入栈操作,右括号进行出栈,最终栈为空则说明序列合法
- 如果遍历字符串时有其他字符,或者当前字符为右括号但是栈为空,说明序列不合法,直接返回false
代码展示
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
stack<char> mystack;
for (int i = 0; i < n; i++)
{
if (A[i] == '(')
{
mystack.push('(');//入栈
}
else if (A[i] == ')')
{
//当前字符为右括号时,先判断栈中是否有括号
if (mystack.empty())
{
return false;
}
mystack.pop();//出栈
}
else
{
return false;
}
}
if (mystack.empty())
{
return true;
}
return false;
}
};