- [编程题]合法括号序列判断
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
测试样例:
“(()())”,6
返回:true
测试样例:
“()a()()”,7
返回:false
测试样例:
“()(()()”,7
返回:false
- 注意:合法的括号串,那么)(这种是不合法的 并且只能包括号
- 思路:用left标记左括号,碰见左括号left++;right标记右括号,碰见右括号right–;用matching对左右括号是否匹配进行判断,因为是合法括号串,那么在往后遍历过程中无论如何一个括号的左括号一定会先于右括号出现,左括号的数量减去右括号的数量一定不小于0。
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
if(n%2!=0)
return false;
int left=0;
int right=0;
int matching=0;
for(int i=0;i<n;i++)
{
if(A[i]=='(')
{
left++;
s=left;
}
else if(A[i]==')')
{
right++;
matching=left-right;
if(s<0)
{
return false;
}
}
else{
return false;
}
}
return true;
}
};