part 1:栈的思想
栈是动态集合,栈的实现是一种先进后出(Last In First Out,LIFO)策略
栈有两个基本操作:入栈(PUSH)和出栈(POP),入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈顶中取出
Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是linkedList、ArrayDeque、linkedBlockingDeque,其中linkedList是最常用的。
java栈堆的实现方法:堆栈
Deque deque = new linkedList()
Deque堆栈操作方法:push()、将元素压入栈堆
pop()、弹出栈顶元素
peek() 检索队列头部
part 2:相关问题求解
先看一个简单题叭
题一 ,力扣20.有效的括号
基本思路:
1.先用哈希表储存括号,键为右括号,值为左括号(方便调用get方法获取对应的值)
2.遍历字符串,遇到左括号存入栈中,遇到右括号如果栈中有元素,取出栈顶元素判断类型是否相同
3.不相同或栈中无元素都不符合条件
4.最后判断栈是否为空
class Solution {
public boolean isValid(String s) {
int len=s.length();
if(len%2!=0){
return false;//如果长度不是偶数肯定有括号未配对
}
HashMap pare=new HashMap();
pare.put(')','(');
pare.put('}','{');
pare.put(']','[');
Deque stack=new linkedList();
for(int i=0;i
接下来在题一的基础上加一点点难度
题二,力扣678.有效的括号字符串
基本思路:1.创建两个栈,一个记录左括号,一个记录*
2.与上述思想类似如果遇到左括号和*分别记录到各自栈中,注意因为此题不用匹配所以栈中储存的不再是字符而是相应的数字下标(为下面比较做准备)
3.如果遇到右括号先与左括号匹配,左括号匹配完全,再与*匹配。如果左括号栈和*栈都为空则返回false
4.如果右括号匹配完毕,左括号栈和*栈还都剩余元素,那么取出栈顶元素依次比较,如果*在‘(’左边的情况则必有左括号无法匹配,返回false
5.最后判断左括号栈是否为空
class Solution {
public boolean checkValidString(String s) {
int len=s.length();
Deque stack=new linkedList();
Deque stack2=new linkedList();//泛型定义为Integer便于下面自
for(int i=0;i



