class Solution {
public:
    /**
     *核心思想:将括号转化为数字,判断是否匹配。
	 { 1
	 [ 2
	 ( 3
	 ) 4
	 ] 5
	 } 6
	 看栈顶元素加当前元素是否为7,是否为空。
     */

     int ID(char a)
     {
        if(a=='[') return 1;
        if(a=='{') return 2;
        if(a=='(') return 3;
        if(a==')') return 4;
        if(a=='}') return 5;
        if(a==']') return 6;
        return 0;
     }
    bool isValid(string s) {
        // write code here
        stack<char> sta;
        for(char c:s)
        {
            int n=ID(c);
            if(n==0) return false;
            if(n>3)
            {
                if(sta.empty()||ID(sta.top())+n!=7)
                {
                    return false;
                }
                else sta.pop();
            }
            if(n>=1&&n<=3)
            {
                sta.push(c);
            }
        }
        return sta.empty();
    }
};