一、题目描述
二、思路
用栈stack<char>解决
(stack<int>也行,因为char本就是存储的ascii码)
遍历字符串:
1.遇到左括号就入栈;
2.遇到右括号就用栈顶元素判断是否匹配(先判断栈是否空,空则return false),然后弹出栈顶元素;
遍历完毕,若栈长度不为0则返回false,否则true。
三、代码
class Solution {
public:
bool isValid(string s) {
stack<char> sta;
for(int i = 0; i < s.length(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){ //左括号,入栈
sta.push(s[i]);
}else{
if(s[i] == ')'){ //右括号,栈顶元素与之匹配
if(sta.size() == NULL || sta.top() != '(')
return false;
}
if(s[i] == ']'){
if(sta.size() == NULL || sta.top() != '[')
return false;
}
if(s[i] == '}'){
if(sta.size() == NULL || sta.top() != '{')
return false;
}
//栈顶元素匹配成功,弹出此元素
sta.pop();
}
}
if(!sta.empty()) // 还有右括号的
return false;
return true;
}
};