题目
本题链接:合法括号序列判断
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
测试样例:
测试样例:
测试样例:
解题思路:
本题可以通过栈来实现。如果遇到非括号字符直接返回false。
遍历字符串,遇到左括号,则压栈;遇到右括号则查看栈中是否有对应的左括号,如果栈为空,则表示匹配不完整,多出了右括号,如果栈顶元素是左括号,则出栈与右括号匹配成为一个完整的括号;遍历完之后,如果栈不为空,则匹配不完整,多出了左括号,栈为空,则表示括号匹配成功。
代码:
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
//遍历字符串
stack<char> sc;
for(auto& ch : A)
{
switch(ch)
{
case '(':
sc.push(ch);//若是左括号入栈
break;
case ')':
if(sc.empty())//如果栈为空,多出右括号
return false;
sc.pop();//栈不为空,则左括号出栈匹配
break;
default://若不是括号字符,则直接返回false
return false;
}
}
return sc.empty();//遍历完之后,如果栈不为空,多出左括号
}
};