【LeetCode】20.有效的括号

20.有效的括号

知识点:栈;消消乐;

题目描述

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

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
示例
输入:s = "()" 输出:true 输入:s = "()[]{}" 输出:true 输入:s = "(]" 输出:false 输入:s = "([)]" 输出:false 输入:s = "{[]}" 输出:true

解法一:栈

这道题目其实是典型的一道栈的题目。可以每次只要遇到左括号就将其压栈,遇到右括号就让其与栈顶元素去做对比,如果和栈顶元素配套的话就出栈,然后判断最后栈里是否还有元素;

class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for(Character c: s.toCharArray()){ if(c == '(' || c == '{' || c == '[') stack.push(c); else if(stack.size() == 0) return false; //证明第一个元素为右边的; else if(c == ')' && stack.peek() != '(') return false; else if(c == '}' && stack.peek() != '{') return false; else if(c == ']' && stack.peek() != '[') return false; else stack.pop(); } return stack.isEmpty(); } }
  • python
class Solution: def isValid(self, s: str) -> bool: stack = [] for item in s: if (item == '(' or item == '{' or item == '['): stack.append(item) elif len(stack) == 0: return False elif item == ')' and stack[-1] != '(': return False elif item == ']' and stack[-1] != '[': return False elif item == '}' and stack[-1] != '{': return False else: stack.pop() return not len(stack)

体会

熟悉栈的操作,要注意与队列区分,包括创建的时候,栈是直接有栈类Stack,而队列是new的LinkedList;其次还有压栈和入队,出栈和出队;

栈往往会用来解决那种两两匹配,两两抵消消消乐的问题,比如常见的有效括号等,就是判断后入栈的相邻元素是否有相互关系能够相互抵消,

相关题目

1047 删除字符串中所有相邻元素
1021 删除最外层的括号


__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15063863.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(474)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】20.有效的括号』
点击右上角即可分享
微信分享提示