有效的括号(力扣刷题)代码随想录刷题

简介: 有效的括号(力扣刷题)代码随想录刷题

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。


2473b2df4e0d4b2ca86af755632a5420.png


来源:力扣(LeetCode)

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

 

思路:


先来分析一下 这里有三种不匹配的情况,

  1. 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。


dbe7ba70c7c640d58e9f1d4d11eb4e41.png

第二种情况,括号没有多余,但是 括号的类型没有匹配上


a65cf354c8e190332bed0f956e798e4f.png


第三种情况,字符串里右方向的括号多余了,所以不匹配。

f0ed091c27e47f56f9955a1ce008bff1.png

我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。


第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false


第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false


第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false


那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。


分析完之后,代码其实就比较好写了,


但还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!


实现C++代码如下:

class Solution {
public:
    bool isValid(string s) {
        //奇数一定不匹配
        if(s.size() % 2 != 0)
        {
            return false;
        }
        stack<char> st;
        for(int i = 0; i < s.size(); 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.pop();
            }
        }
        return st.empty();
    }
};


相关文章
|
2天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
8 0
|
2天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
9 4
|
2天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
9 1
|
2天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
7 1
|
2天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
7 2
|
2天前
leetcode代码记录(回文数
leetcode代码记录(回文数
8 1
|
2天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
10 2
|
2天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
8 1
|
2天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
5 0
|
2天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
8 0

热门文章

最新文章