当前位置:网站首页>面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
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系列】MySQL索引事务
security CSRF Vulnerability Protection
如何优雅的消除系统重复代码
多御安全浏览器android版更新至1.7,改进加密协议
电机原理动图合集
单片机遥控开关系统设计(结构原理、电路、程序)
How to solve the error when mysql8 installs make
background-image使用
【Leetcode】1206. Design Skiplist
A brief analysis of mobile APP security testing in software testing, shared by a third-party software testing agency in Beijing
随机推荐
【ACWing】406. 放置机器人
Thinkphp 5.0.24变量覆盖漏洞导致RCE分析
如何用Redis实现分布式锁?
Enterprise firewall management, what firewall management tools are there?
Excel文件读写(创建与解析)
recursion: method calls itself
2022还想上岸学习软件测试必看,测试老鸟的肺腑之言...
security cross-domain configuration
cdh6打开oozieWeb页面,Oozie web console is disabled.
REST会消失吗?事件驱动架构如何搭建?
技术分享 | 接口测试中如何使用Json 来进行数据交互 ?
Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
Excel导入和导出
QML包管理
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~
C language Qixi is coming!It's time to show the romance of programmers!
Win10安装DBeaver连接MySQL8、导入和导出数据库详细教程
学习英语的网站与资料
Is TCP reliable?Why?
类型“FC<Props>”的参数不能赋给类型“ForwardRefRenderFunction<unknown, Props>”的参数。 属性“defaultProps”的类型不兼容。 不