当前位置:网站首页>面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
2022-08-01 23:58:00 【陈亦康】
目录
热身:
1 . 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2 B: 2,3,4,1 C: 3,1,4,2 D: 3,4,2,1分析:这里有个隐含条件,压栈序列1,2,3,4,当时压栈,当时就可以出栈,简单来讲,让1进栈时,当时就可以将1弹出栈,再往后进栈;
如此分析,只有B选项符合条件:1进栈,2进栈,与B选项第一个出栈序列匹配,弹出2,再看进栈序列中:1与弹出序列的3不匹配,继续对进栈序列的下一个元素比较,如此往复,可得出答案。
JZ31栈的压入、弹出序列

思路:
- 创建一个栈stack
- 对进栈序列先压栈再与出栈序列比较
- 若相等则弹出
import java.util.*;
import java.util.ArrayList;
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
Stack<Integer> stack = new Stack<>();
int count = 0;//计数:与压栈数据匹配则加一
for(int i = 0; i < pushA.length; i++){
if(pushA[i] == popA[count]){
//先压栈,再判断
stack.push(pushA[i]);
while(stack.peek() == popA[count]){
stack.pop();
count++;
//popA遍历完说明正确
if(count == pushA.length){
return true;
}
/**
*弹出栈后,可能一个元素也不剩,这时再到while里判断,
*有可能能造成对空指针的解引用操作
*/
if(stack.empty()){
break;
}
}
}
else{
stack.push(pushA[i]);
}
}
return false;
}
}逆波兰表达式求值

博主已整理出博客,快去看看吧~
有效的括号

也是对栈的理解中,频率较高的考题
思路:
1.创建一个栈
2.大的方向上遍历给定数组
3.小的方向上比较是否匹配
注意:不匹配分为以下几种情况
a.左右括号不匹配
b.右括号多:当前下标是右括号,但栈为空
c.左括号多:字符串数组遍历完成,但栈仍不为空
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch == '(' || ch == '{' || ch == '['){
stack.push(ch);
}
else{
//说明ch是右括号
if(stack.empty()){
//右括号多
return false;
}
char tmp = stack.peek();
if(tmp == '(' && ch == ')' ||
tmp == '{' && ch == '}' ||
tmp == '[' && ch == ']'){
//当前括号匹配
stack.pop();
}
else{
//左右括号不匹配
return false;
}
}
}
//判断是否为空
if(stack.empty()){
return true;
}
else{
//左括号多
return false;
}
}
}边栏推荐
- 根本上解决mysql启动失败问题Job for mysqld.service failed because the control process exited with error code
- 工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
- thinkphp漏洞总结
- @Scheduled注解详解
- Keepalived 高可用的三种路由方案
- 2022 6th Strong Net Cup Part WP
- 【MySQL篇】初识数据库
- @Transactional 注解使用详解
- 一篇永久摆脱Mysql时区错误问题,idea数据库可视化插件配置
- 【图像融合】基于加权和金字塔实现图像融合附matlab代码
猜你喜欢
随机推荐
Win11如何获得最佳电源效率?
字节跳动面试官:请你实现一个大文件上传和断点续传
12306抢票,极限并发带来的思考?
尚硅谷MySQL学习笔记
mysql8安装make报错如何解决
软件测试之移动APP安全测试简析,北京第三方软件检测机构分享
security跨域配置
yay 报错 response decoding failed: invalid character ‘<‘ looking for beginning of value;
技术分享 | 接口测试中如何使用Json 来进行数据交互 ?
Various Joins of Sql
2022第六届强网杯部分wp
【Leetcode】479. Largest Palindrome Product
洞见云原生微服务及微服务架构浅析
【MySQL系列】 MySQL表的增删改查(进阶)
GetHashCode与Equals
REST会消失吗?事件驱动架构如何搭建?
Chrome书签插件,让你实现高效整理
信息系统项目管理师必背核心考点(五十七)知识管理工具
很多人喜欢用多御安全浏览器,竟是因为这些原因
@Transactional 注解使用详解









