列表

详情


BM44. 有效括号序列

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]""([)]"不合法

数据范围:字符串长度
要求:空间复杂度 ,时间复杂度

示例1

输入:

"()[]{}"

输出:

true

示例2

输入:

"[]"

输出:

true

示例3

输入:

"([)]"

输出:

false

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2021-05-27

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        stack<char> st;
        int n = s.size();
        for(int i=0;i<n;i++){
            if(!st.empty() && ((s[i] == ']' && st.top()=='[') || (s[i] == '}' && st.top()=='{')|| (s[i] == ')' && st.top()=='(')))
                st.pop();
            else
                st.push(s[i]);
        }
        return st.empty();
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 324KB, 提交时间: 2021-03-03

#include<stack>
class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        stack<int> stk;
        
        int flag=true;
        for (int i=0; i<s.length(); ++i){
            if (s[i] == '('){
                stk.push(0);
            }
            if (s[i] == '['){
                stk.push(1);
            }
            if (s[i] == '{'){
                stk.push(2);
            }
            
            if (s[i] == ')'){
                if (!stk.empty() && stk.top() == 0){
                    stk.pop();
                }
                else{
                    flag = false;
                    break;
                }
            }
            if (s[i] == ']'){
                if (!stk.empty() && stk.top() == 1){
                    stk.pop();
                }
                else{
                    flag = false;
                    break;
                }
            }
            if (s[i] == '}'){
                if (!stk.empty() && stk.top() == 2){
                    stk.pop();
                }
                else{
                    flag = false;
                    break;
                }
            }
        }
        
        if (!stk.empty()){
            flag = false;
        }
        
        return flag;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-05-20

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        // write code here
        stack<char> st;
        auto f = [](char a, char b) {
            if (a=='('&&b==')' || a=='['&&b==']' || a=='{'&&b=='}') {
                return true;
            }
            return false;
        };
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
                st.push(s[i]);
            } else {
                if (st.empty() || !f(st.top(),s[i])) {
                    return false;
                } else {
                    st.pop();
                }
            }
        }
        if (st.empty()) return true;
        else return false;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-04-25

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<char> st;
      for(int i=0;i<s.size();i++)
      {
        if(s[i]=='('||s[i]=='{'||s[i]=='[')
        {if(s[i]=='(')
          s[i]=')';
        else if(s[i]=='{')
          s[i]='}';
        else
          s[i]=']';
         st.push(s[i]);
        }
        else
        {
          if(st.size()==0)
            return false;
          if(st.top()!=s[i])
            return false;
          st.pop();
        }
      }
      if(st.size()!=0)
        return false;
      return true;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-04-12

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<char>stk;
        for(int i=0;i<s.size();++i)
        {
            switch(s[i])
            {
                case '(':
                    stk.push(s[i]);
                    break;
                case '[':
                    stk.push(s[i]);
                    break;
                case '{':
                    stk.push(s[i]);
                    break;
                case ')':
                    if(stk.empty()||stk.top()!='(')
                        return false;
                    stk.pop();
                    break;
                case ']':
                    if(stk.empty()||stk.top()!='[')
                        return false;
                    stk.pop();
                    break;
                case '}':
                    if(stk.empty()||stk.top()!='{')
                        return false;
                    stk.pop();
                    break;
            }
        }
        return stk.empty()?true:false;
    }
};

上一题