LeetCodeの有効な括弧C++版

9577 ワード

タイトルの説明:
‘(’,’)’,’{’,’}’,’[’,’]’のみを含む文字列を与え,文字列が有効であるか否かを判断する.
有効な文字列は次のとおりです.
左かっこは同じタイプの右かっこで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.
   1:

  : "()"
  : true

   2:

  : "()[]{}"
  : true

   3:

  : "(]"
  : false

   4:

  : "([)]"
  : false

   5:

  : "{[]}"
  : true

C++コードは以下の通りです.
class Solution {
public:
    bool isValid(string s) {
        if(s.length()%2!=0) return false;//              
        map<char,char> wordbook;//     
        wordbook.insert(map<char,char>::value_type(')','('));
        wordbook.insert(map<char,char>::value_type(']','['));
        wordbook.insert(map<char,char>::value_type('}','{'));
        stack<char> mystack;//   
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='['||s[i]=='{'||s[i]=='(')//      
                mystack.push(s[i]);//    
            else if(s[i]==']'||s[i]=='}'||s[i]==')')//      
            {
                if(mystack.empty()) return false;
                //      ,         。         
                if(wordbook[s[i]]==mystack.top())//         
                {
                    mystack.pop();//          
                    continue;
                }
                else return false;
            }
        }
        if(mystack.empty()) return true;//                   
        else return false;
    }
};