LeetCode刷题笔记 20. 有效的括号 【栈】

LeetCode刷题笔记 20. 有效的括号

  • Stack
  • vecStack
  • 哈希表

Stack

class Solution {
public:
    bool isValid(string s) {
        if(s.size() % 2) return false;
        stack<char> vecStack;
        char c;
        for(auto i:s){
            if(i=='}'||i==']'||i==')'){
                if(!vecStack.empty()) c=vecStack.top();
                else return false;
                if(i=='}'&&c!='{') return false;
                if(i==']'&&c!='[') return false;
                if(i==')'&&c!='(') return false;
                vecStack.pop();
            }
            else vecStack.push(i);
        }
        return vecStack.empty();
    }
};

vecStack

class Solution {
public:
    bool isValid(string s) {
        if(s.size() % 2) return false;
        vector<char> vecStack;
        char c;
        for(auto i:s){
            if(i=='}'||i==']'||i==')'){
                if(!vecStack.empty()) c=vecStack[vecStack.size()-1];
                else return false;
                if(i=='}'&&c!='{') return false;
                if(i==']'&&c!='[') return false;
                if(i==')'&&c!='(') return false;
                vecStack.pop_back();
            }
            else vecStack.push_back(i);
        }
        return vecStack.empty();
    }
};

哈希表

class Solution {
public:
    bool isValid(string s) {
    	if(s.size() % 2) return false;
        unordered_map<char,int> m{{'(',1},{'[',2},{'{',3},{')',4},{']',5},{'}',6}};
        stack<char> st;
        bool isture=true;
        for(char c:s){
            int flag=m[c];
            if(flag>=1&&flag<=3) st.push(c);
            else if(!st.empty()&&m[st.top()]==flag-3) st.pop();
            else {isture=false;break;}
        }
        if(!st.empty()) isture=false;
        return isture;
    }
};

你可能感兴趣的:(Leetcode)