链接:https://www.nowcoder.com/questionTerminal/d8acfa0619814b2d98f12c071aef20d4
来源:牛客网
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
思路:利用栈,如果括号成对,则栈空,否则非空。
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
stack<char> st;
for(int i = 0;i < n;i++)
{
if(A[i] == '(' || A[i] == ')')
{
if(A[i] == '(')
st.push(A[i]);
if(A[i] == ')' && !st.empty())
st.pop();
}
else
return false;
}
if(st.empty())
return true;
return false;
}
};
另一种方法:利用变量计数
classParenthesis{
public:
bool chkParenthesis(string A,intn)
{
int number=0,i;
for(i=0;i<n;i++)
{
if(A[i]=='(')
number++;
if(A[i]==')')
number--;
if(number<0)
return false;
}
if(number==0)
return true;
else
return false;
}
};