当前位置:网站首页>力扣20-有效的括号——栈实现
力扣20-有效的括号——栈实现
2022-07-30 05:09:00 【张怼怼√】
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
解题思路
写代码时一般也要遵从代码的语法规范,括号不符合规范也会报语法错误,一般会出现以下几种情况:
- 左括号多了 ( ( )
- 右括号多了 [ ] ]
- 左右括号不匹配 ( [ ) ]
而且发现如果有括号嵌套时,最内侧的括号是距离最近的(后进先出),最外侧的括号距离是最远的(先进后出),可以联想到这道题目可以用栈来求解。
关于java中的栈Deque是一个双端队列的接口,它的实现类有LinkedList、ArrayDeque、LinkedBlockingDeque,其中比较常用的是LinkedList,这也就是AyyarList会报错的原因。
当Deque作为堆栈时,一般使用push、pop、peek三种方法。
- 新建一个栈arr Deque<Character> arr = new LinkedList<>();
- 遍历字符串s
- 如果遇到左括号一律转变为相应的右括号,这样做的目的是为了将遍历到的右括号与栈内元素做匹配
- 如果在遍历过程中发现栈已经为空,说明右括号数量多了,返回false
- 如果遍历完了发现栈不为空,说明左括号数量多了,也会返回false
- 如果遍历到的字符ch 与当前栈顶元素不匹配,也会返回false,否则就可以pop弹出栈顶元素。
输入输出示例

代码
class Solution {
public boolean isValid(String s) {
int len = s.length();
char ch;
//Deque<Character> arr = new ArrayList<>();
Deque<Character> arr = new LinkedList<>();
for(int i = 0; i < len; i++){
ch = s.charAt(i);
if(ch =='('){
arr.push(')');
}else if(ch =='['){
arr.push(']');
}else if(ch == '{'){
arr.push('}');
}else if(arr.isEmpty()){ //在遍历过程中栈为空说明右括号个数多了
return false;
}else if(ch == arr.peek()){//栈顶元素与当前元素匹配才可以弹出,也就是说左右元素必须匹配
arr.pop();
}else return false;
}
return arr.isEmpty();//如果遍历完发现不为空则说明左括号个数多了
}
}边栏推荐
- 暴力递归到动态规划 05 (贴纸拼词)
- Hexagon_V65_Programmers_Reference_Manual (12)
- Kyligence 亮相第五届南方信息大会并获评“CIO 优选数字化服务商”
- 美国再次加息75个基点 陷入“技术性衰退”?加密市场却呈现复苏力量
- handler+message [message mechanism]
- 【Vitis】ZCU102开发板PS端控制PL端复位的代码实现
- 聊一聊什么是SaaS,以及遇到的问题......
- 容器化 | 在 KubeSphere 中部署 MySQL 集群
- oracle触发器的自治事务
- Kyligence 出席华为全球智慧金融峰会,加速拓展全球市场
猜你喜欢

3. Dependency configuration management

The Complete Go Books - Beginner to Advanced and Web Development

给小白的 PostgreSQL 容器化部署教程(上)

pyinstaller打包程序所遇问题记录
![[Vitis] Code implementation of ZCU102 development board PS-side control PL-side reset](/img/f2/429e3dd157647bb614595a83843140.png)
[Vitis] Code implementation of ZCU102 development board PS-side control PL-side reset

模拟问题(中)

小程序npm包--API Promise化

Compound Types--references, pointers

Kyligence 出席华为全球智慧金融峰会,加速拓展全球市场

涂鸦Wi-Fi&BLE SoC开发幻彩灯带
随机推荐
(Hexagon_V65_Programmers_Reference_Manual(13)
Hexagon_V65_Programmers_Reference_Manual (11)
Dynamic Programming Problems (End)
go language study notes 2
VisualStudio2022 local debugging entry is particularly slow problem solving
ms project2010项目管理软件使用技巧总结
go语言学习笔记四
Acwing完全数
Intermediate - interview questions
模拟问题(下)
L2-020 功夫传人
LeetCode Algorithm 328. Parity linked list
C语言中的基本库函数(qsort)
[High Performance Computing] openMP
L2-025 分而治之
Alibaba Cloud's EasyNLP Chinese text image generation model takes you to become an artist in seconds
L2-020 descendants of kung fu
如何让 (a == 1 && a == 2 && a == 3) 的值为true?
SVN View Username and Password
Recursive Optimization of Fibonacci Sequences "Memo Recursion"