java stack训练(1)

2023-11-17

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

class Solution {
    public boolean isValid(String s) {
        if(s.isEmpty())
            return true;
        Stack<Character> stack=new Stack<Character>();
        for(char c:s.toCharArray()){
            if(c=='(')
                stack.push(')');
            else if(c=='{')
                stack.push('}');
            else if(c=='[')
                stack.push(']');
            else if(stack.empty()||c!=stack.pop())
                return false;
        }
        return stack.empty();
    }
}

 

 

逆波兰表达式求值

根据 逆波兰表示法,求表达式的值。

有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

注意 两个整数之间的除法只保留整数部分。

可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

 

class Solution {
    public boolean isNumber(String token) {
        return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
    }

    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String s : tokens) {
            if (isNumber(s)) {
                stack.push(Integer.parseInt(s));
            } else {
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch (s) {
                    case "+" -> stack.push(num1 + num2);
                    case "-" -> stack.push(num1 - num2);
                    case "*" -> stack.push(num1 * num2);
                    case "/" -> stack.push(num1 / num2);
                    default -> {
                    }
                }
            }
        }
        return stack.pop();
    }
}

 

栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

1. 0<=pushV.length == popV.length <=1000

2. -1000<=pushV[i]<=1000

3. pushV 的所有数字均不相同

import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public boolean IsPopOrder(int[] pushA, int[] popA) {
        int len = pushA.length;
        Stack<Integer> stack = new Stack<>();
        int index = 0;
        for (int i = 0; i < len; i++) {
            while (index < len && (stack.empty() || stack.peek() != popA[i])) {
                stack.push(pushA[index]);
                index++;
            }
            if (stack.peek() == popA[i]) {
                stack.pop();
            } else {
                return false;
            }
        }
        return true;
    }
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java stack训练(1) 的相关文章

随机推荐

  • React 列表 & Keys

    列表 Keys 列表 React 列表可以使用 JavaScript 的 map 方法来创建 如下
  • 个人博客源码_快速入门Springboot,开源一个Springboot的博客系统【源码+视频】

    好多小伙伴说要在国庆节的时候 充电 让自己更快进步 当然 孟哥最近也在不断充电 只有坚持不断学习 总结 才能离架构越来越近 今天给大家的系统是基于SpingBoot的博客系统 附带源码和视频教程 视频的教程如下所示 1 分析与设计 1 课程
  • Windows下搭建Linux子系统(WSL系统配置)

    在Windows下创建linux子系统路线 一 Win下Linux子系统介绍 二 Win10配置子系统安装环境 三 子系统安装 四 测试安装后的效果 五 修改子系统目录位置 注意 一 Win下Linux子系统介绍 1 在Windows中实现
  • 【汇编程序】试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”

    STACKS SEGMENT STACK DW 100H DUP TOP LABEL WORD STACKS ENDS DATAS SEGMENT STRING1 DB abcd123 STRING2 DB abcd133 定义两个不同的字
  • 集合在多线程下 不安全的代码案例,以及解决方法

    package thread import java util import java util concurrent ConcurrentHashMap import java util concurrent CopyOnWriteArr
  • Adapter:适配器模式

    Adapter模式用于令接口不兼容的类可以一起工作 Adapter本身用于适配这些不兼容的类 如 现在有一个需求 需要使用标准类接口 而现有类功能可以实现 但是接口并非标准 于是 可以使用一个Adapter 将现有类的接口转换为标准接口 从
  • SpringMVC入门指南

    目录 前言 一 什么是SpringMVC 二 MVC架构模式 三 SpringMVC的工作流程 四 SpringMVC核心组件 五 SpringMVC的优势 六 SpringMVC的配置与常用注解 七 SpringMvc请求处理流程 控制器
  • QT QStringList 用法

    QStringList类提供了一个字符串列表从QList
  • python实现词云

    python实现词云 制作说明 使用python制作词云需要导入WordCloud库 该库是python中的一个非常优秀的词云展示第三方库 此外 为了能够在python中显示中文字符 还需下载 安装另一个库 jieba库 该库也是一个pyt
  • 文件搜索工具Everything

    Everything是由voidtools开发的一款文件搜索工具 这款软件是基于名称实时定位文件和目录 Everything功能强大 体积小巧 第一次安装使用时会建立一个索引数据库 将所有文件和文件夹的名称导入其中 后续使用能够以极快的速度
  • 动态链接库的创建和调用

    1 CManageCounter h 头文件 TEMPLATEDLL EXPORTS 在 配置属性 gt c c gt 预处理器 gt 预处理定义 注 自己命名 ifdef TEMPLATEDLL EXPORTS define TRADEG
  • 大一c语言选择题库及答案,c语言选择题(大一c语言编程题库)

    第一个结果是1 因为c语言中没有布尔类型 把1当作true 0当作false 看第一题 是逻辑与运算符 返回结果只会是1或0 即真或假 x 15结果大于1 被认为是真 C语言中 对文件操作的一般步骤是 A 打开文件 gt 操作文件 gt 关
  • Suricata + Wireshark离线流量日志分析

    目录 一 访问一个404网址 触发监控规则 1 使用python搭建一个虚拟访问网址 2 打开Wireshark 抓取流量监控 3 在Suricata分析数据包 流量分析经典题型 入门题型 题目 Cephalopod 图片提取 进阶题型 题
  • Java中的异常

    异常Exception 是指程序运行时 由于输入错误 网络 程序逻辑等原因导致运行时出现的问题 出现异常时 程序会暂时中断执行 并根据产生异常的原因 创建对应异常类型的异常对象 并抛出给JVM捕获处理 1 Java中的常见异常 1 Null
  • HTML5 简介及基础教程

    什么是 HTML5 HTML5是一种用于创建Web页面和应用程序的标记语言 是HTML的第五个版本 HTML5是由万维网联盟 W3C 和网络超文本应用技术工作组 WHATWG 共同开发的 并于2014年10月推出了最终版本 HTML5包括一
  • WebRTC源码架构浅析

    http www oschina net question 35855 121850
  • 【Python基础】Python简介

    开篇 从本篇文章开始 笔者将带着大家一起学习Python的入门基础知识 自从人工智能 大数据行业的兴起 Python变得炙手可热 成为了近几年最流行的语言之一 2018年 Python 语言上升了 3 62 其次是Visual Basic
  • AI算法工程师

    目录 机器学习 概率图模型 之 隐马尔可夫模型 HMM 一 马尔科夫链 二 HMM 的基本概念 1 HMM 背景与定义 2 HMM 的两个基本假设 3 确定 HMM 的两个空间和三组参数 三 HMM 三个基本问题 导图 四 HMM 相关算法
  • BLE MESH在配网广播中的Service UUID:1827与1828

    Mesh Provisioning UUID 1827 是一种服务的UUID 一般在广播包中中代表设备为未配网设备 也用于给配网器进行识别 在该服务下还有两个UUID 0x2ADB 用于写 0x2ADC 用于上报 在使用GATT配网阶段的数
  • java stack训练(1)

    有效的括号 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 class Solution public boolean isValid String s if