当前位置:网站首页>面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
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篇】初识数据库
- 2022 6th Strong Net Cup Part WP
- 根本上解决mysql启动失败问题Job for mysqld.service failed because the control process exited with error code
- 【Leetcode】479. Largest Palindrome Product
- FAST-LIO2代码解析(二)
- @WebServlet注解(Servlet注解)
- CDH6 Hue to open a "ASCII" codec can 't encode characters
- C语言七夕来袭!是时候展现专属于程序员的浪漫了!
- TCP 可靠吗?为什么?
- GetHashCode与Equals
猜你喜欢

@WebServlet注解(Servlet注解)

零基础如何学习单片机,一位入门者的进阶路径,可参考

认识USB、Type-C、闪电、雷电接口

cdh的hue上oozie启动报错,Cannot allocate containers as requested resource is greater than maximum allowed

信息系统项目管理师必背核心考点(五十七)知识管理工具

TexturePacker使用文档

多御安全浏览器android版更新至1.7,改进加密协议

Axure教程-新手入门基础(小白强烈推荐!!!)

解析正则表达式的底层实现原理

windows sql server 如何卸载干净?
随机推荐
background-image使用
Sql之各种Join
【Leetcode】473. Matchsticks to Square
thinkphp漏洞总结
在linux下MySQL的常用操作命令
工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
【三子棋】C语言实现简易三子棋
Several interview questions about golang concurrency
带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
尚硅谷MySQL学习笔记
如何重装Win11?一键重装Win11方法
【Leetcode】1206. Design Skiplist
Chrome书签插件,让你实现高效整理
信息系统项目管理师必背核心考点(五十七)知识管理工具
Flink学习第四天——完成第一个Flink 流批一体案例
YOLO等目标检测模型的非极大值抑制NMS和评价指标(Acc, Precision, Recall, AP, mAP, RoI)、YOLOv5中[email protected]与
Artifact XXXwar exploded Artifact is being deployed, please wait...(已解决)
Keepalived 高可用的三种路由方案
OpenCV DNN blogFromImage() detailed explanation
分享一份接口测试项目(非常值得练手)