题目描述
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
stack<string> s;
for(int i =0;i < A.size();++i)
{
if(A[i] == '(')
s.push(")");
else
{
if(A[i] != ')') return false;
if (s.empty() || s.top()!=")") return false;
else s.pop();
}
}
if(!s.empty())
{
return false;
}
else
return true;
}
};
扩展
class Parenthesis {
public:
bool chkParenthesis(string s, int n) {
// write code here
if(s.empty())
return false;
stack<char> st;
for(int i = 0;i < s.size();++i)
{
char c =s[i];
if(c =='(' || c =='[' || c =='{')
st.push(c);
else
{
switch (c){
case ')': if (st.empty() || st.top()!='(') return false; else st.pop(); break;
case ']': if (st.empty() || st.top()!='[') return false; else st.pop(); break;
case '}': if (st.empty() || st.top()!='{') return false; else st.pop(); break;
default: ; // pass
}
}
}
return (st.empty()) ;
}
};