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.
假设我们有一串(,),[,],{,}的字符串s。我们要判断这串字符串是不是一串有效的组合。比如[]{()}是遗传有效的组合。[)[]}是一串无效的组合。

代码及其注释

class Solution {
public:
    bool isValid(string s) {
      string left = "([{";
      string right = ")]}";
      stack stk;
      for(auto c : s){
        if(left.find(c) != string::npos){
          stk.push(c);
        }
        else{
          if(stk.empty() || stk.top() != left[right.find(c)]){
            return false;
          }
          else{
            stk.pop();
          }
        }
      }
      return stk.empty(); 
    }
};

分析

用一个stack就可以了,把s里面的字符一个一个过一遍。
1 如果我们遇到 ([{ 里面的一个,就把这个字符放入stack里面。
2 如果我们遇到 )]} 里面的一个,就把这个字符和stack最顶端的字符进行比较:
(a)如果遇到的字符和stack顶端字符相等,把stack顶端的字符去掉,然后继续比较字符串的下一个
(b)如果遇到的字符和stack顶端的不相等,就返回false。

当把s里面的字符串都过了一遍以后,再看stack是不是空,如果空就返回true。不空就返回false。

你可能感兴趣的:(Valid Parentheses 题解)