力扣:20.有效的括号
思路:利用栈容器储存括号字符,遍历字符串,如果首先入栈的为右括号则直接return false,否则将其入栈,若在遍历过程中遇到的为右括号且与栈顶的符号匹配,则弹出栈顶元素。(栈内均为左括号),若遇到的右括号与栈顶的左括号不匹配则return false;遍历完后,判断栈的大小,若不为0,则有多余的括号,若为0则return true;
代码如下(c++):
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i =0;i<s.size();i++){
if(stk.empty()&&(s[i]==')'||s[i]==']'||s[i]=='}')){
return false;
}
if(s[i]=='('||s[i]=='['||s[i]=='{'){
stk.push(s[i]);
}else{
if(s[i]==')'){
if(stk.top()=='('){
stk.pop();
}else{
return false;
}
}else if(s[i]==']'){
if(stk.top()=='['){
stk.pop();
}else{
return false;
}
}else if(s[i]=='}'){
if(stk.top()=='{'){
stk.pop();
}else{
return false;
}
}
}
}
if(!stk.empty()){
return false;
}
return true;
}
};