算法day25

第一题

394. 字符串解码

        解法:模拟栈的完成上述的操作;

分析:

下面以如图的字符串来分析;

        首先定义一个数字栈用来存放数字,同时定义一个容器stringbuffer栈,里面用来存放字符串;

        1、遇到数字:将这个数字进栈操作到数字栈中;

        2、遇到‘【’符号,将【符号后面的字符串提取出来,放入到字符串栈中;

        3、遇到‘】’:首先将此时字符串栈顶的字符串拿出来,进行解析,根据数字栈栈顶的数字来重复刚取出来的字符串,最后将解析好的字符串放在字符串栈顶;

        4、遇到单独的字符:将这个单独的字符串直接放在字符串栈顶字符的后面;

小细节:如果遇到的数字是非单位数,我们要能够完整的获取到这个多位数的数字;

        综上所述,代码如下:

class Solution {
    public String decodeString(String s) {
        Stack<StringBuffer> st = new Stack<>();
        st.push(new StringBuffer());//先放一个空串
        Stack<Integer> nums = new Stack<>();
        int i = 0,n = s.length();
        char[] s1 = s.toCharArray();
        while(i < n){
            //遇到数字
            if(s1[i] >= '0' && s1[i] <= '9' ){
                int tmp = 0;
                while(i < n && s1[i] >= '0' && s1[i] <= '9' ){
                    tmp = tmp * 10 + (s1[i] - '0');
                    i++;
                }
                nums.push(tmp);
            }
            else if(s1[i] == '['){
                i++;//把后面的字符串提取出来
                StringBuffer tmp = new StringBuffer();
                while(i < n && s1[i] >= 'a' && s1[i] <= 'z' ){
                    tmp.append(s1[i]);
                    i++;
                }
                st.push(tmp);
            }
            else if(s1[i] == ']'){
                //解析字符串
                StringBuffer tmp = st.pop();
                int num = nums.pop();
                while(num-- != 0){
                   st.peek().append(tmp);
                }
                i++;
            }
            else{
                StringBuffer tmp = new StringBuffer();
                while(i < n && s1[i] >= 'a' && s1[i] <= 'z' ){
                    tmp.append(s1[i]);
                    i++;
                }
                st.peek().append(tmp);
            }

        }
        return st.peek().toString();
    }
}

        

第二题        

解法:模拟栈的基本运行逻辑

步骤:

1、让元素一直进栈操作

2、定义指针来指向popped数组的0号位置元素,在进栈后判断栈顶元素是否和出栈元素的指针所指的元素相同,如果相同,则进行出栈操作;如果不同则指针位置向后移动一个位置,接着进行入栈操作;

        综上所述,代码如下:

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Stack<Integer> st = new Stack<>();
        int i = 0,n = popped.length;
        for(int x : pushed){
            st.push(x);
            while(!st.isEmpty() && st.peek() == popped[i]){
                st.pop();
                i++;
            }
        }
        return i == n;
    }
}

ps:本次的内容就到这里了,如果对你有所帮助的话,就请一键三连哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/699446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

VRRP多备份组(华为)

#交换设备 VRRP多备份组 当 VRRP 配置为单备份组时&#xff0c;业务全部由 Master 设备承担&#xff0c;而 Backup 设备完全处于空闲状态&#xff0c;没有得到充分利用。VRRP 可以通过配置多备份组来实现负载分担&#xff0c;有效地解决了这一问题。 VRRP 允许同一台设备的…

排序方法——《快速排序》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

10、系统安全及应用

1、账号安全 用户的账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号才能进入计算机。 1.1 系统账号清理 在Linux系统中&#xff0c;除了用户手动创建的各种账号之外&#xff0c;还包括随系统或程序安装过程而生成的其…

Java版本+企业电子招投标系统源代码+支持二开+Spring cloud +鸿鹄电子招投标系统

随着公司的迅速扩张&#xff0c;对内部采购管理的要求也随之提高。为了构建一个公平、透明、公正的采购体系&#xff0c;并有效降低采购成本&#xff0c;我们决定开发一款符合国家电子招投标法规的电子招标采购软件。该软件将提升招投标工作的公开性和透明度&#xff0c;通过电…

macOS Sequoia 开发者测试版下载和安装教程

macOS Sequoia 于 2024年6月10日在WWDC 2024 上发布&#xff0c;里面添加了AI、窗口排列、操控iPhone等功能&#xff0c;目前发布的为测试版本&#xff0c;可能很多人不知道怎么去下载安装&#xff0c;现在小编教一下大家怎么安装最新的 macOS Sequoia 开发者测试版。 下载 mac…

Qt系统相关

本文目录 1.Qt事件事件的处理标签事件鼠标事件滚轮事件按键事件定时器事件窗口事件事件派发器 2.Qt文件操作QFile的基本使用 3.Qt多线程使用线程线程锁connect的第五个参数 条件变量和信号量 4.Qt网络编程UDP SocketTCP SocketQTcpServerQTcpSocket HTTP的编写 5.QT多媒体播放音…

vivado HW_SIO_GT

描述 Xilinx的可定制LogiCORE™IP集成误码率测试仪&#xff08;IBERT&#xff09;核心 FPGA是为评估和监控千兆收发器&#xff08;GTs&#xff09;而设计的。IBERT core支持系统内串行I/O验证和调试&#xff0c;使您能够进行测量和优化 您的设计中的高速串行I/O链路。参考综合误…

【ARM Coresight Debug 系列 -- ARMv8/v9 软件实现断点地址设置】

请阅读【嵌入式开发学习必备专栏 】 文章目录 ARMv8/v8 软件设置段带你断点地址软件配置流程代码实现 ARMv8/v8 软件设置段带你 在ARMv8/9架构中&#xff0c;可以通过寄存器 DBGBVR0_EL1 设置断点。这个寄存器是一系列调试断点值寄存器中的第一个DBGBVRn_EL1&#xff0c;其中n…

Transformer结合U-Net登上Nature子刊!最新成果让精度和效率都很美丽

最近一种基于视觉Transformer改进的U-Net来检测多光谱卫星图像中甲烷排放的深度学习方法登上了Nature子刊。与传统方法相比&#xff0c;该方法可以识别更小的甲烷羽流&#xff0c;显著提高检测能力。 这类Transformer与U-Net结合的策略是一种创新的深度学习方法&#xff0c;它…

大模型生成短视频

最近看到一个开源项目可以通过AI生成短视频&#xff0c;然后尝试了下&#xff0c;感觉还不错&#xff0c;下面是具体步骤。 项目名叫moneyprinterTurbo&#xff0c;它本意是对接到Youtube&#xff0c;自动生成视频并上传到Youtube获取流量赚钱&#xff0c;所以项目名叫moneypri…

函数计时的方法

1. console 对象 可以调⽤ console 对象的 time 和 timeEnd ⽅法来对⼀段程序进⾏时间计算。例如&#xff1a; function fib(n) {if (n 0) return;let a arguments[1] || 1;let b arguments[2] || 1;[a, b] [b, a b];fib(--n, a, b); } console.time(); // 记时开始 fib…

纹理贴图必须要输入顶点坐标或纹理坐标吗

最近知识星球的一位同学,面试时被问到:纹理贴图必须要输入顶点坐标或纹理坐标吗? 他一下子被这个问题问蒙了,虽然他知道正确答案是否定的,但是说不上来理由。 这个就引出了文本提到的全屏三角形,它不需要顶点缓冲区,而是利用顶点着色器直接生成所需的顶点坐标和纹理坐标…

推荐一些企业热门的 DevOps 工具(非常详细)零基础入门到精通,收藏这一篇就够了

最近一段时间&#xff0c;我们见证了 DevOps 技术的飞速发展。当今流行且功能强大的工具可能会成为下一年度的过时工具&#xff0c;甚至可能很快被另一种工具取代。如前所述&#xff0c;作者的目的不是通过这篇文章来评判哪些工具最受欢迎或功能最全&#xff0c;而是让读者全面…

【每日一题】错误的集合

错误的集合 ✨审题&#xff1a;在一个1-n的数组中&#xff0c;会有一个元素重复&#xff0c;一个元素丢失&#xff1b;&#x1f449;目标;找到重复的元素和丢失的元素并放入一个数组中返还回去 ✨有没有想到单身狗问题的进阶版那个思路&#xff0c;找2个单身狗&#xff0c;一个…

tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值)

目录 延迟应答 引入 介绍 原则 拥塞控制 引入 网络出现拥塞 引入 介绍 介绍 拥塞窗口 介绍 决定滑动窗口的大小 慢启动 介绍 为什么要有慢启动 阈值 算法 总结 延迟应答 引入 发送方一次发送更多的数据,发送效率就越高 因为要写入网卡硬件的io速度很慢,尽量…

176.二叉树:从中序与后序遍历序列构造二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

神卓互联内网穿透:使用超简单,拿捏

神卓互联内网穿透技术是一种能够打破内网与外网之间壁垒的创新技术。它通过一系列智能的网络协议和算法&#xff0c;实现了将企业内部网络资源安全、稳定地暴露给外部网络访问。这使得无需进行复杂的网络配置和改造&#xff0c;就能轻松实现远程办公、跨地域协作等重要应用。 神…

【第1章】Vue环境搭建

文章目录 前言一、安装Node1. 下载2. 安装3. 验证3.1 npm版本与Node.js版本3.2 验证环境 4. npm4.1 安装npm4.2 安装包4.3 全局安装包4.4 更新包4.5 删除包4.6 查看已安装的包4.7 初始化package.json 5. 国内源 二、安装Visual Studio Code1.下载2.安装3.安装Vue - Official 三…