当前位置:网站首页>【LeetCode】老虎证券面试-括号嵌套且满足优先级
【LeetCode】老虎证券面试-括号嵌套且满足优先级
2022-08-03 08:51:00 【凝眸伏笔】
LeetCode第20题:简单括号 力扣
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
例子:
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
解题思路:
- 如果 c 是左括号,则入栈 pushpush;
- 否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 falsefalse。
解决边界问题:
- 栈 stack 为空: 此时 stack.pop() 操作会报错;因此,我们采用一个取巧方法,给 stack 赋初值 ?? ,并在哈希表 dic 中建立 key: '?',value:'?'key: ′? ′,value: ′? ′的对应关系予以配合。此时当 stack 为空且 c 为右括号时,可以正常提前返回 falsefalse;
- 字符串 s 以左括号结尾: 此情况下可以正常遍历完整个 s,但 stack 中遗留未出栈的左括号;因此,最后需返回 len(stack) == 1,以判断是否是有效的括号组合。
解题代码:
class Solution:
def isValid(self, s: str) -> bool:
stack = ['?']
kv = {'(':')', '[':']', '{':'}','?':'?'}
for ch in s:
if ch in kv.keys():
stack.append(ch)
elif stack and kv[stack.pop()] != ch: return False
res = False
if len(stack) == 1:
res = True
return res题目变种:
题目描述:
要求括号,满足:
- 成对出现
- 满足嵌套关系,{}中,可以有[], ()
解题思路:
在上述解题思路的基础上,在入栈的时候,做一个嵌套优先级的判断.
解题代码:
def isValid(s):
stack = ['?']
kv = {'(':')', '[':']', '{':'}','?':'?'}
for ch in s:
if ch in kv.keys():
if ch == '{' and len(stack) >=2 and stack[-1] in {'(', '['}:
return False
if ch == '[' and len(stack) >=2 and stack[-1] in {'('}:
return False
stack.append(ch)
elif kv[stack.pop()] != ch: return False
res = False
if len(stack) == 1:
res = True
return res边栏推荐
- [Kaggle combat] Prediction of the number of survivors of the Titanic (from zero to submission to Kaggle to model saving and restoration)
- RViz报错: Error subscribing: Unable to load plugin for transport ‘compressed‘解决方法
- Laya中关于摄像机跟随人物移动或者点击人物碰撞器触发事件的Demo
- 开发工具之版本控制
- ArcEngine (3) zoom in and zoom out through the MapControl control to achieve full-image roaming
- 浅析什么是伪类和伪元素?伪类和伪元素的区别解析
- Exception: Dataset not found. Solution
- 【微信小程序】底部有安全距离,适配iphone X等机型的解决方案
- The display of the article list and the basics of creating articles and article details
- 【LeetCode】226. Flip the binary tree
猜你喜欢

LINGO 18.0 software installation package download and installation tutorial

Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容

dflow入门1——HelloWorld!

LINGO 18.0软件安装包下载及安装教程

dflow入门3——dpdispatcher插件

Eject stubborn hard drives with diskpart's offline command

10分钟带你入门chrome(谷歌)浏览器插件开发
redis stream 实现消息队列

机器学习(公式推导与代码实现)--sklearn机器学习库

Redis cluster concept and construction
随机推荐
Unity编辑器扩展批量修改图片名称
MySQL2
vim 折叠函数
Nacos使用实践
xtrabackup
MySQL-TCL语言-transaction control language事务控制语言
flush tables
【TPC-DS】DF的SQL(Data Maintenance部分)
STP普通生成树安全特性— bpduguard特性 + bpdufilter特性 + guard root 特性 III loopguard技术( 详解+配置)
Using pipreqs export requirements needed for the project. TXT (rather than the whole environment)
Gauva的ListenableFuture
机器学习(公式推导与代码实现)--sklearn机器学习库
HCIP练习03(重发布)
Laya中关于摄像机跟随人物移动或者点击人物碰撞器触发事件的Demo
What are pseudo-classes and pseudo-elements?The difference between pseudo-classes and pseudo-elements
【LeetCode】226. Flip the binary tree
LAN技术-2免费ARP
MySQL-存储过程-函数-
Redisson实现分布式锁
WPF 学习笔记《WPF样式基础》