合法括号序列判断
题目描述:
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
“(()())”,6
返回:true
测试样例:
“()a()()”,7
返回:false
测试样例:
“()(()()”,7
返回:false
思路:
(1):我们可以使用栈,’( ’ 就压栈,‘ )’如果栈内又‘( ’,就出栈,没有就出错了。
(2):用一个计数,遇到’( ’ 就++;遇到 ‘ )’就–,如果计数小于0,则说明不匹配。
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
stack<char> s;
for(auto e : A)
{
switch(e)
{
case '(':
s.push(e);
break;
case ')':
{
if(s.empty() || s.top() != '(')
return false;
else
s.pop();
}
break;
default:
return false;
}
}
return true;
}
};
--------------------------------------------------
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
int left = 0;
for(int i = 0; i < A.size(); ++i)
{
if(A[i] == '(')
left++;
else if(A[i] == ')')
{
if(left > 0)
left--;
else
return false;
}
else
return false;
}
return left == 0;
}
};