leetcode 20.有效的括号

  贪心+栈。

int cnt[5];
int l[10007],t=0;

class Solution {
public:
    bool isValid(string s) {
        cnt[1]=0,cnt[2]=0,cnt[3]=0;
        int lim=s.size();
        for (int i=0;i<lim;i++){
            if (s[i]=='(')
                cnt[1]++,l[++t]=1;
            else if (s[i]==')'&&l[t]==1)
                cnt[1]--,t--;
            else if (s[i]=='{')
                cnt[2]++,l[++t]=2;
            else if (s[i]=='}'&&l[t]==2)
                cnt[2]--,t--;
            else if (s[i]=='[')
                cnt[3]++,l[++t]=3;
            else if (s[i]==']'&&l[t]==3)
                cnt[3]--,t--;
            else return false;
            if (cnt[1]<0||cnt[2]<0||cnt[3]<0)
                return false;
        }
        if (cnt[1]==0&&cnt[2]==0&&cnt[3]==0)
            return true;
        return false;
    }
};

 

posted @ 2021-06-10 18:10  wegret  阅读(44)  评论(0)    收藏  举报