当前位置:网站首页>leetcode 20. Valid Parentheses 有效的括号(中等)
leetcode 20. Valid Parentheses 有效的括号(中等)
2022-08-09 22:10:00 【okokabcd】
一、题目大意
标签: 栈和队列
https://leetcode.cn/problems/valid-parentheses
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
二、解题思路
思路:括号匹配是典型的使用栈来解决的问题。从左向右遍历,每当遇到左括号便放入栈内,遇到右括号则判断其和栈顶的括号是否是统一类型,是则从栈内取出左括号,否则说明字符不串不合法。
实现:遍历字符串,如果栈为空则将当前字符入栈,如果栈顶字符与当前字符匹配则栈顶字符出栈,不匹配当前字符入栈,遍历结束如果栈为空说明字符串合法。
三、解题方法
3.1 Java实现
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (Character c : s.toCharArray()) {
if (isPush(stack, c)) {
stack.push(c);
} else {
stack.pop();
}
}
return stack.isEmpty();
}
private boolean isPush(Stack<Character> stack, Character c) {
if (stack.isEmpty()) {
return true;
}
// {[(
boolean isPop = (stack.peek().equals('[') && c.equals(']') ||
stack.peek().equals('{') && c.equals('}') ||
stack.peek().equals('(') && c.equals(')'));
return !isPop;
}
}
3.2 2014年的实现
public class Solution {
public boolean isValid(String s) {
if (s == null || s.length() == 0) {
return true;
}
Stack<Byte> ps = new Stack<Byte>();
byte[] bArr = s.getBytes();
boolean isValid = true;
for (byte b : bArr) {
if (!isValid) {
break;
}
switch (b) {
case '(':
case '[':
case '{':
ps.push(b);
break;
case ')':
case ']':
case '}':
if (!ps.empty()) {
byte tmpB = ps.pop();
if (tmpB == 40) {
tmpB++;
} else {
tmpB+=2;
}
if (tmpB != b) {
isValid = false;
}
} else {
isValid = false;
}
break;
default:
// do nothing
}
}
if (!ps.empty()) {
isValid = false;
}
return isValid;
}
}
四、总结小记
- 2022/8/9 一场秋雨一场寒
边栏推荐
- Leetcode 235. 二叉搜索树的最近公共祖先
- mysql中的key是怎么用的,或者这个值有什么意义,如下图?
- charts.js插件实现的散点图样式
- UNI-APP_ monitor page scroll h5 monitor page scroll
- daemon
- Leetcode.25 K个一组翻转链表(模拟/递归)
- PyQt5: Getting Started Tutorial
- R语言将列表数据转化为向量数据(使用unlist函数将列表数据转化为向量数据)
- [WeChat applet development (8)] Summary of audio background music playback problems
- 全球不用交税的国家,为什么不交
猜你喜欢
随机推荐
【Apifox】为什么如此受青睐,此篇文章和大家分享
少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(判断题)2022年6月
R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(包含时间点、预测值、两个置信区间)
web 面试高频考点 —— 性能优化篇(手写防抖、手写节流、XXS攻击、XSRF攻击)
APS系统能消除造成生产和运输延迟的瓶颈
一体化伺服电机在三轴钻孔机中的应用
都在说云原生,那云原生到底是什么?
B. Applejack and Storages
R语言将列表数据转化为向量数据(使用unlist函数将列表数据转化为向量数据)
Miscellaneous talk - the sorrow of programmers
leetcode:332. 重新安排行程
2022牛客暑期多校训练营6(ABGIJM)
leetcode:325. 和等于k的最长子数组长度
mysql中的key是怎么用的,或者这个值有什么意义,如下图?
第 1 章 一大波数正在靠近——排序
Swift 需求 如何防止把view重复添加到win里面
daemon
VR全景结合小程序,为线上电商更好的服务
【AtomicInteger】常规用法
UNI-APP_ monitor page scroll h5 monitor page scroll