例题描述
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A
和它的长度n
,请返回一个bool
值代表它是否为一个合法的括号串。
示例1:
- 输入
"(()())",6
- 输出
true
示例2:
- 输入
"()a()()",7
- 输出
false
示例3:
- 输入
"()(()()",7
- 输出
false
解题思路
括号匹配性问题统一使用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。
本题只提到了圆括号()
的匹配问题,所以不用考虑花括号{}
和尖括号<>
等,代码量会很简洁。
代码实现
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
if(A.empty())
return false;
stack<char> s;
for(int i = 0;i < n;++i){
if(A[i] == '(')
s.push('(');
else if(A[i] == ')'){
if(s.empty())
return false;
s.pop();
}
else
return false;
}
if(s.empty())
return true;
}
};