【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题

力扣官方题解

相关推荐
J先生x4 分钟前
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
图像处理·人工智能·学习·算法·计算机视觉
ErikTse_1 小时前
【官方题解】StarryCoding 入门教育赛 2 | acm | 蓝桥杯 | 新手入门
职场和发展·蓝桥杯
爱coding的橙子2 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
码上淘金3 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo3 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_787552874 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
虾球xz4 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
懵逼的小黑子4 小时前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django
fpcc5 小时前
跟我学c++高级篇——模板元编程之十三处理逻辑
c++
Y3174295 小时前
Python Day23 学习
python·学习