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

力扣官方题解

相关推荐
AntBlack28 分钟前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
艾莉丝努力练剑1 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
C++、Java和Python的菜鸟2 小时前
第六章 统计初步
算法·机器学习·概率论
Cx330❀2 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.2 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
散1122 小时前
01数据结构-Prim算法
数据结构·算法·图论
起个昵称吧3 小时前
线程相关编程、线程间通信、互斥锁
linux·算法
阿巴~阿巴~3 小时前
深入解析C++ STL链表(List)模拟实现
开发语言·c++·链表·stl·list
myzzb3 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
TLuoQiu3 小时前
小电视视频内容获取GUI工具
爬虫·python