栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

栈的思想及相关问题求解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈的思想及相关问题求解

 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 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号