zoukankan      html  css  js  c++  java
  • 【LeetCode-字符串】有效的括号

    题目描述

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
    有效字符串需满足:

    • 左括号必须用相同类型的右括号闭合。
    • 左括号必须以正确的顺序闭合。
    • 注意空字符串可被认为是有效字符串。

    示例:

    输入: "()"
    输出: true
    
    输入: "(]"
    输出: false
    
    输入: "{[]}"
    输出: true
    

    题目链接: https://leetcode-cn.com/problems/valid-parentheses/

    思路

    用栈来做。遍历输入的字符串序列,当当前元素为右括号(')',']','}')并且栈顶元素为当前元素对应的左括号('(','[','{')时,将栈顶元素弹出;当不对应或者栈为空时,将当前元素压入栈。遍历结束时,如果栈为空,则说明括号匹配,字符串有效;否则说明字符串无效。代码如下:

    class Solution {
    public:
        bool isValid(string s) {
            if(s.empty()){
                return true;
            }
            if(s[0]==')' || s[0]==']' || s[0]=='}'){
                return false;
            }
    
            stack<char> stk;
            stk.push(s[0]);
            for(int i=1; i<s.length(); i++){
                if(stk.empty()){    // 别忘了这一步
                    stk.push(s[i]);
                }else if(s[i]==')'){
                    if(stk.top()=='('){
                        stk.pop();
                    }else{
                        stk.push(s[i]);
                    }
                }else if(s[i]==']'){
                    if(stk.top()=='['){
                        stk.pop();
                    }else{
                        stk.push(s[i]);
                    }
                }else if(s[i]=='}'){
                    if(stk.top()=='{'){
                        stk.pop();
                    }else{
                        stk.push(s[i]);
                    }
                }else{
                    stk.push(s[i]);
                }
            }
    
            if(stk.empty()){
                return true;
            }else return false;
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
      当括号完全不匹配时,栈的空间为字符串的长度。
  • 相关阅读:
    String 尺取法
    dos 命令
    又见01背包
    01串
    Python-Matplotlib 10 面向对象 VS Matlab Style
    [ 转 ] Fiddler 教程
    Android 查看设备文件
    Python-Matplotlib 9 颜色和样式 [r]
    Python-Matplotlib 8 箱形图
    Python-Matplotlib 7 饼状图
  • 原文地址:https://www.cnblogs.com/flix/p/12681257.html
Copyright © 2011-2022 走看看