1.题目描述
链接:https://www.nowcoder.com/questionTerminal/d8acfa0619814b2d98f12c071aef20d4
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。测试样例: “(()())”,6 返回:true
测试样例: “()a()()”,7 返回:false
测试样例: “()(()()”,7 返回:false
2.思路分析
- 建栈,遍历字符串A,
- 遇到左括号入栈,右括号分情况
- 如果栈空的话,那就不匹配直接返回false
- 如果栈顶元素是左括号的话就出栈
- 其他情况直接入栈
- 最后判断如果栈空的话,那一定匹配返回true
- 否则返回false
3.代码实现
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
// 栈解决
stack<char> s;
// 遍历字符串A
for(int i = 0; i < n; i++)
{
// 左括号入栈
if(A[i] == '(')
s.push(A[i]);
else if(A[i] == ')')
{
// 判断为空的话不匹配,则直接出栈
if(s.empty())
return false;
// 栈顶是左括号直接出栈
if(s.top() == '(')
s.pop();
else
// 其他直接入栈
s.push(A[i]);
}
else
// 规避字符
return false;
}
// 最后如果栈为空的话,就直接返回true,反之则不
if(s.empty())
return true;
return false;
}
};