【Leetcode | easy】有效的括号
题目
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
思路
空字符串可被认为是有效字符串;
而对于非空字符串,被判断为有效字符串的条件是括号都按相应顺序和类别互相匹配。因此,可以利用一个先进后出的栈,保存左括号的顺序和类别,从而按顺序进行左右括号两两配对,以判断括号的有效性。
算法描述如下:
- 字典d1保存右括号对应的左括号类型,d2用于判断括号为左括号还是右括号
- 利用栈来判断括号的闭合顺序
- 对于字符串中的每一个元素,进行4,5,6操作
- 首先判断是左括号还是右括号
- 对于右括号,分情况判断:
a. 若此时栈为空,则不符合括号闭合顺序,判定为无效的括号,跳到操作8
b. 若栈不为空,且当前栈顶元素为右括号对应的左括号,配对成功,将该左括号移出栈
c. 若栈不为空,且当前栈顶元素不是右括号对应的左括号,则配对不成功,判定为无效的括号,跳到操作8 - 对于左括号,直接压栈操作
- 若遍历完所有元素以后,栈为空,则说明括号都按相应顺序和类别,两两配对完了,则括号有效,跳到操作8
- 输出判定结果
解答
class Solution:def isValid(self, s):""":type s: str:rtype: bool"""d1 = { ')':'(', '}':'{', ']':'['}d2 = {'(': 1, ')': -1, '{': 1, '}': -1, '[': 1, ']': -1}stack = []isValid = Falsei = 0while i < len(s):if d2[s[i]] == -1:if stack == []:breakelif d1[s[i]] == stack[-1]:stack.pop()else:breakif d2[s[i]] == 1:stack.append(s[i])i+=1;if i == len(s) and stack == []:isValid = Truereturn isValid
【Leetcode | easy】有效的括号相关推荐
- leetcode easy problem set
*勿以浮沙筑高台* 持续更新........ 题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...
- LeetCode 2116. 判断一个括号字符串是否有效(栈)
文章目录 1. 题目 2. 解题 1. 题目 一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串. 如果一个字符串满足下面 任意 一个条件,那么它就是有效的: 字符串为 (). 它可以表示 ...
- LeetCode 678. 有效的括号字符串(栈)
1. 题目 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ). 任何右括号 ) 必须有相应 ...
- LeetCode 20. 有效的括号(栈)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭 ...
- 秋招算法字符串专场leetcode(Easy十六题)
字符串专场 459. 重复的子字符串 1-给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1:输入: "ab ...
- Leetcode 1096:花括号展开 II(超详细!!!)
如果你熟悉 Shell 编程,那么一定了解过花括号展开,它可以用来生成任意字符串. 花括号展开的表达式可以看作一个由 花括号.逗号 和 小写英文字母 组成的字符串,定义下面几条语法规则: 如果只给出单 ...
- 【Java】LeetCode 20 有效的括号 (运用数据结构:栈 解题)
题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 解题 ...
- LeetCode Valid Parentheses(判断括号是否匹配)
题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配 思路:用栈结构判断 1.如果是(,[,{,将其入栈 2.如果遇到),],},看栈是否为空.栈顶元素是否对应为(,[,{ 3.将字符 ...
- 【Leetcode | easy】两数之和
题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], targ ...
最新文章
- jiebaR中文分词,从入门到喜欢
- Java项目经验——程序员成长的关键
- Netty @Sharable的使用
- socket开发中INADDR_ANY的含义是什么?
- arm opcode hook
- Beego 学习笔记9:Boostrap使用介绍
- coreldraw x4如何重叠图片_CorelDRAW复制及镜面反转对象
- Powershell 自定义对象小技巧
- 大数据分析平台具备怎样的功能
- 转换成XmlDocument
- skype国际版android,Skype国际版
- 调试技巧(Debugging)
- 自从看了<<麦肯锡的领导力法则>>之后......
- 风寒感冒和风热感冒 区别
- 微分方程建模实例:对药剂量开处方
- Ciphertext-Policy Attribute-Based Encryption (CP-ABE) Toolkit Installation
- 耗时五个月的项目实训——影行App
- 使用DiskGenius扩展C盘大小,遇见“您选择的分区不支持无损调整容量”
- WordPress让插件随主题一同启用
- maven archetype 自定义
热门文章
- Python入门学习笔记13(线程锁与信号量)
- Dell 笔记本的 BIOS设置 USB Wake Support 的设置
- 'Push segues can only be used when the source controller is managed by an instance of UINavigationC
- Android ----制作自己的Vendor
- 加密和解密.net配置节
- wse2.0实现webservice安全(转)
- ArrayList add(int index,E element)
- java数组之binarySearch查找
- Android 5.0 Lollipop介绍
- Ffmpeg 定位文件(seek file)