题目描述
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
思路
用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。
题解代码:
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
stack<char> st;
for (auto i : A) {
if (i == '(') {
st.push(i);
}
else if (i == ')') {
if (st.empty() || st.top() != '(') {
return false;
}
else {
st.pop();
}
}
else
return false;
}
return true;
}
};
方法二:
class Parenthesis {
public:
// 其实是判断合法的括号串,出现了非括号的字符就算错
bool chkParenthesis(string A, int n) {
if(n%2 != 0) return false;
int count = 0;
for(int i = 0; i < n; ++i){
if(A[i] == '(') ++count;
else if(A[i] == ')'){
--count;
if(count < 0) return false;
}
}
if(count != 0) return false;
return true;
}
};
如有不同见解,欢迎留言讨论~~