题目描述
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
题解:
遇到左括号时,变量值+1,遇到右括号时变量值-1,一定要特别判断出现")("这种情况,因为变量值最后虽然是0,但是该字符串仍是不合法的。遇到非括号的字符时,如果变量值<=0,说明该字符肯定在括号外,不合法。当遍历完整个字符串,变量值为0时,说明该字符串合法。
#include<bits/stdc++.h>
using namespace std;
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
int left = 0;
for(int i = 0; i < n; i++)
{
if(A[i] == '(')
left++;
else if(A[i] == ')')
{
if(left <= 0)
return false;
else
left--;
}
else
{
if(left <= 0)
return false;
}
}
if(left == 0)
return true;
return false;
}
};
int main()
{
Parenthesis p;
cout << p.chkParenthesis("()(()()", 7) << endl;;
return 0;
}