当前位置:网站首页>面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
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;
}
}
}边栏推荐
- 【三子棋】C语言实现简易三子棋
- 辛普森悖论
- C language Qixi is coming!It's time to show the romance of programmers!
- 【MySQL系列】MySQL数据库基础
- A brief analysis of mobile APP security testing in software testing, shared by a third-party software testing agency in Beijing
- security跨域配置
- @Transactional 注解使用详解
- 使用Jenkins做持续集成,这个知识点必须要掌握
- 在linux下MySQL的常用操作命令
- 程序员还差对象?new一个就行了
猜你喜欢

Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)

如何进行数据库备份

使用 Zadig 交付云原生微服务应用

分享一份接口测试项目(非常值得练手)

2022还想上岸学习软件测试必看,测试老鸟的肺腑之言...

Zadig 面向开发者的自测联调子环境技术方案详解

async和await用法介绍

GIF制作-灰常简单的一键动图工具

Get piggy homestay (short-term rental) data

With a monthly salary of 12K, the butterfly changed to a new one and moved forward bravely - she doubled her monthly salary through the career change test~
随机推荐
OpenCV DNN blogFromImage()详解
LeetCode_322_零钱兑换
2022第六届强网杯部分wp
Architecture basic concept and nature of architecture
Win11内存管理错误怎么办?
信息系统项目管理师必背核心考点(五十七)知识管理工具
Detailed explanation of Zadig's self-testing and tuning environment technical solution for developers
cdh6打开oozieWeb页面,Oozie web console is disabled.
如何优雅的消除系统重复代码
security CSRF Vulnerability Protection
学习笔记:机器学习之回归
好好活就是做有意义的事,有意义的事就是好好活
一个有些意思的项目--文件夹对比工具(一)
OpenCV DNN blogFromImage() detailed explanation
GIF制作-灰常简单的一键动图工具
2022 6th Strong Net Cup Part WP
TCP 可靠吗?为什么?
Programmer is still short of objects? A new one is enough
security CSRF漏洞保护
企业防护墙管理,有什么防火墙管理工具?