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<char> 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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容