zoukankan      html  css  js  c++  java
  • 2021.1.30 刷题(括号匹配)

    题目链接:https://leetcode-cn.com/problems/valid-parentheses/
    题目描述:
    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。

    示例 1:
    输入:s = "()"
    输出:true
    示例 2:

    输入:s = "()[]{}"
    输出:true
    示例 3:

    输入:s = "(]"
    输出:false

    示例 4:
    输入:s = "([)]"
    输出:false

    示例 5:
    输入:s = "{[]}"
    输出:true

    提示:
    1 <= s.length <= 104
    s 仅由括号 '()[]{}' 组成
    题解:
    在之前的学习中,这道题理解的不够透彻,今天看到一个逻辑清晰又简便的方法,特别学习记录下来。

    第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false
    第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false
    第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false
    字符串遍历完之后,栈是空的,就说明全都匹配了。
    摘自:https://mp.weixin.qq.com/s/nLlmPMsDCIWSqAtr0jbrpQ

    class Solution {
    public:
        bool isValid(string s) {
            int n = s.size();
            if (n % 2 == 1) {
                return false;
            }
            stack<char> st;
            for(int i = 0; i < n; i++)
            {
                if (s[i] == '(') st.push(')');
                else if(s[i] == '{') st.push('}');
                else if(s[i] == '[') st.push(']');
                else{
                    if(st.empty() || st.top() !=s[i])       //右括号多余或者括号不匹配
                        return false;
                    else                    //st.top() == s[i]
                        st.pop();
                }
            }
            return st.empty();          //st非空,说明左括号多余
        }
    };
    
  • 相关阅读:
    ios状态栏
    RGBA设置颜色
    应用程序的生命周期(转)
    UIViewController的生命周期
    UIViewController的创建
    UIButton
    NSUserDefaults
    打印结构体
    iOS 界面间的传值 属性传值 代理传值
    如何安装Homebrew
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14348882.html
Copyright © 2011-2022 走看看