【LeetCode面试150】——20有效的括号

博客昵称:沈小农学编程

作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

题目难度:简单

默认优化目标:最小化时间复杂度。

Python默认为Python3。

目录

[1 题目描述](#1 题目描述)

[2 题目分析](#2 题目分析)

[3 算法框架及代码实现](#3 算法框架及代码实现)

[3.1 栈](#3.1 栈)

参考文献


1 题目描述

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

有效字符串需满足:

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

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

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

示例 1:

**输入:**s = "()"

**输出:**true

示例 2:

**输入:**s = "()[]{}"

**输出:**true

示例 3:

**输入:**s = "(]"

**输出:**false

示例 4:

**输入:**s = "([])"

**输出:**true

提示:

  • 1 <= s.length <= 104

  • s 仅由括号 '()[]{}' 组成

2 题目分析

输入是一个字符串数组s,输出是布尔值。判断s是否有效。有效的条件是左右括号类型相同且以正确的方式闭合。

3 算法框架及代码实现

3.1 栈

因为需要判断左右括号类型是否正确,我们可以开一个字典将类型相同的左右括号变成一对。然后从左往右进行对左括号压栈出栈操作,判断与右括号的关系,即:

· 如果是左括号,则添加到栈中;

· 如果是右括号,则检查栈是否为空栈,或栈顶的左括号是否与当前右括号相匹配。匹配诚恐后为true;反之为false。

流程图如下:

复制代码

时间复杂度,空间复杂度是字典开辟的空间。

**C++**代码实现

cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        if(s.size()%2==1){
            return false;
        }
        unordered_map<char, char> pairs={
            {')', '('},
            {']', '['},
            {'}', '{'}
        };
        stack<char> st;
        for(char ch:s){
            if(ch=='(' || ch=='[' || ch=='{') st.push(ch);
            else{
                if(st.empty() || st.top()!=pairs[ch]) return false;
                st.pop();
            }
        }
        return st.empty();
    }
};

Python代码实现

python 复制代码
class Solution:
    def isValid(self, s: str) -> bool:
        if len(s) % 2 == 1:
            return False
​
        pairs = {
            ')': '(',
            ']': '[',
            '}': '{'
        }
​
        stack = []
        for ch in s:
            if ch in '([{':
                stack.append(ch)
            else:
                if not stack or stack[-1] != pairs[ch]:
                    return False
                stack.pop()
​
        return not stack

参考文献

力扣面试经典150题

力扣官方题解

相关推荐
豹哥学前端44 分钟前
别再背“var 提升,let/const 不提升”了:揭开暂时性死区的真实面目
前端·面试
叶小鸡1 小时前
小鸡玩算法-力扣HOT100-堆
数据结构·算法·leetcode
小雅痞1 小时前
[Java][Leetcode simple] 28. 找出字符串中第一个匹配项的下标
java·开发语言·leetcode
步辞1 小时前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python
Ulyanov1 小时前
《PySide6 GUI开发指南:QML核心与实践》 第一篇:GUI新纪元——QML与PySide6生态系统全景
开发语言·python·qt·qml·雷达电子对抗
曲幽1 小时前
FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透
python·fastapi·web·async·sqlalchemy·session·crud·sync·with
Dxy12393102161 小时前
Python 如何使用 XPath 定位元素:从入门到实战
python
用户8356290780511 小时前
Python 设置 PowerPoint 文档属性与页面参数
后端·python
何陋轩1 小时前
【重磅】悟空来了:国产AI编程助手深度测评,能否吊打Copilot?
人工智能·算法·面试
weixin_424999362 小时前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python