LeetCode:20.Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

这个题要求判断一个由括号组成的字符串是否合法。比如[{()()}]是合法的,可以观察到最前面的括号'['要被最后的括号']'匹配走,那么自然而然想到的结构。

我们使用一个栈来存储左括号。对字符串进行扫描:对于一个左括号,我们进行压栈;对于一个右括号,我们让它与栈顶进行配对,若配对成功,则出栈,否则字符串不合法,还需要注意的是,在进行配对之前判断一下栈是否为空,若栈为空,则直接断定字符串不合法。扫描完后,如果栈为空,则说明所有的左括号都被成功匹配走了,则字符串合法,否则字符串不合法。

 一开始为了少写几行代码,用了unordered_map.

class Solution {
public:
    bool isValid(string s) {
        stack<char> brackets;
        
        unordered_map<char,char> map;
        map['(']=')';
        map['{']='}';
        map['[']=']';
        
        for(auto c:s)
        {
           if(c=='('||c=='['||c=='{')
              brackets.push(c);
           else
           {
              if(brackets.empty())
                 return false;
              if (c!=map[brackets.top()])
                 return false;
              brackets.pop();
              
           }
        }
        return brackets.empty()?true:false;
        
    }
};

一看怎么运行时间怎么那么落后,那还是老老实实多写几行代码吧。

class Solution {
public:
    bool isValid(string s) {
        stack<char> brackets;
        
        for(auto c:s)
        {
           if(c=='('||c=='['||c=='{')
              brackets.push(c);
           else
           {
              if(brackets.empty())
                 return false;
              switch(c)
              {
                  case (')'):
                  if(brackets.top()=='(')
                    brackets.pop();
                  else
                    return false;
                  break;
                    
                  case(']'):
                  if(brackets.top()=='[')
                    brackets.pop();
                  else
                    return false;
                  break;
                    
                  case('}'):
                  if(brackets.top()=='{')
                    brackets.pop();
                  else
                    return false;
                  break;
              }

              
           }
        }
        return brackets.empty()?true:false;
        
    }
};

 

posted @ 2017-01-16 14:36  tacia  阅读(203)  评论(0编辑  收藏  举报