力扣:20.有效的括号

力扣: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;
    }
};

你可能感兴趣的:(算法,leetcode,c++,算法)