11.优化算法之栈

1.删除字符串中的所有相邻重复项

可以用数组模拟栈结构 

class Solution {
    public String removeDuplicates(String s) {
        if(s.length()<=1){
            return s;
        }
        StringBuffer ret=new StringBuffer();
        
        for(int i=0;i<s.length();i++){
            if(ret.length()<1){
                ret.append(s.charAt(i));
            }else if(s.charAt(i)==ret.charAt(ret.length()-1)){
                ret.deleteCharAt(ret.length()-1);
            }else{
                ret.append(s.charAt(i));
            }
        }
        return ret.toString();
    }
}

 

2.比较含退格的字符串 

844. 比较含退格的字符串 - 力扣(LeetCode)

class Solution {
    public boolean backspaceCompare(String s, String t) {
        return changeStr(s).equals(changeStr(t));
    }

    public String changeStr(String str1){
        StringBuffer ss=new StringBuffer();
        char[] str=str1.toCharArray();
        for(char ch:str){
            if(ch!='#'){
                ss.append(ch);//入栈
            }else{
                if(ss.length()>0){
                    ss.deleteCharAt(ss.length()-1);//出栈
                }
            }
        }
        return ss.toString();
    }
}

3.基本计算器2

. - 力扣(LeetCode)

算法原理

双端队列也可以实现栈

class Solution {
    public int calculate(String s) {
        //双端队列,实现栈操作
        Deque<Integer> deque=new ArrayDeque<>();
        char op='+';
        int i=0,n=s.length();
        char[] ss=s.toCharArray();
        while(i<n){
            //1.先考虑为空的情况
            if(ss[i]==' '){
                i++;
            }else if(ss[i]>='0'&ss[i]<='9'){
                int tmp=0;
                while(i<n&&ss[i]>='0'&ss[i]<='9'){
                    tmp=tmp*10+(ss[i]-'0');
                    i++;
                }
                if(op=='+'){
                    deque.push(tmp);
                }else if(op=='-'){
                    deque.push(-tmp);
                }else if(op=='*'){
                    deque.push(deque.poll()*tmp);
                }else if(op=='/'){
                    deque.push(deque.poll()/tmp);
                }
            }else{
                op=ss[i];
                i++;
            }
        }
        //遍历队列
        int ret=0;
        while(!deque.isEmpty()){
            ret=ret+deque.poll();
        }
        return ret;
    }
}

 4.字符串解码

394. 字符串解码 - 力扣(LeetCode)

 算法原理

class Solution {
    public String decodeString(String s) {
        int i=0,n=s.length();
        char[] ss=s.toCharArray();
        //构造栈
        Stack<StringBuffer> strstack=new Stack<>();
        //字符串要先加入一个空字符串
        //不然会出现越界的情况
        strstack.push(new StringBuffer());
        Stack<Integer> numstack=new Stack<>();
        while(i<n){
            //1.遇到数字的情况
            if(ss[i]>='0'&&ss[i]<='9'){
                int tmp=0;
                while(i<n&&ss[i]>='0'&&ss[i]<='9'){
                    tmp=tmp*10+(ss[i]-'0');
                    i++;
                }
                numstack.push(tmp);
            }else if(ss[i]==' '){
                i++;
            }else if(ss[i]=='['){
                i++;
                //后面遇到的字符串都要加入栈中
                StringBuffer str=new StringBuffer();
                while(i<n&&ss[i]>='a'&&ss[i]<='z'){
                    str.append(ss[i]);
                    i++;
                }
                strstack.push(str);
            }else if(ss[i]==']'){
                int num1=numstack.pop();
                StringBuffer str1=strstack.pop();
                while(num1--!=0){
                    strstack.peek().append(str1);
                }
                i++;
            }else{
                //后面遇到的字符串都要加入栈中
                StringBuffer str=new StringBuffer();
                while(i<n&&ss[i]>='a'&&ss[i]<='z'){
                    str.append(ss[i]);
                    i++;
                }
                strstack.peek().append(str);
            }
        }
        return strstack.peek().toString();
    }
}

 5.验证栈序列

. - 力扣(LeetCode)

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;
    }
}

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

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

相关文章

字符编码-unicode码表

unicode在线码表&#xff1a;https://www.tamasoft.co.jp/en/general-info/unicode.html Unicode Table

Stable Diffusion中放大图像的3种方法

前言 要执行 ControlNet tile upscale&#xff1a; 您想使用 Stable Diffusion 创建包含大量细节的大型图像吗&#xff1f;您将需要使用升频器。在本文中&#xff0c;您将学习 3 种放大图像的方法。 人工智能升级器标清高档ControlNet瓷砖高档 您将看到比较并了解这些方法的优…

【Arduino】小飞鱼通达二开实验ESP32使用红外寻迹传感器 (图文)

在智能小车项目中都会有一个功能就是自动巡线&#xff0c;今天小飞鱼通达来实验的就是这个红外寻迹传感器。 红外寻迹传感器的原理就是有一个小灯发出红外光&#xff0c;光线照到物体后进行反射&#xff0c;有一个接收器进行接收&#xff0c;当在一定距离内会导通电路&#xf…

【AI绘画Stable Diffusion】教你制作 SD 光影文字,保姆级教程建议收藏!(附模型下载)

大家好&#xff0c;我是设计师阿威 最近光影文字又开始火起来了。今天讲讲怎么利用 Stable Diffusion 的 ControlNet 插件来制作光影图片。 1.下载光影模型组件 1.SD主模型&#xff1a;majicMIX realistic V6、xxmix9realistic_v26 2. ControlNet 的模型&#xff1a;Bright…

3、加密算法-AES和RSA

前两节博客主要是针对MD5和哈希算法&#xff0c;数字签名算法做了阐述和总结&#xff1b; 这篇文章主要是针对AES和RSA做一个概况和比较&#xff0c;以及相关的一些概念&#xff1b; 一、对称加密算法 对称加密算法是指加密和解密采用相同的密钥口&#xff0c;是可逆的(即可解…

高等数学在Android开发中的应用:函数极限与算法优化

高等数学在Android开发中的应用:函数极限与算法优化 在Android开发中,高等数学中的许多概念和技术都能够显著提高应用程序的性能和功能。这篇博客将探讨一些具体的数学原理,特别是函数极限在Android中的实际应用。 函数极限的基本概念 函数极限是微积分的基础,广泛应用于…

R可视化:好看的气泡图

加载R包 library(tidyverse) library(camcorder)gg_record(dir "tidytuesday-temp", device "png", width 8, height 8, units "in", dpi 320)导入数据 team_results <- readr::read_csv(https://raw.githubusercontent.com/rfordata…

有手就行,轻松本地部署 Llama、Qwen 大模型,无需 GPU

用 CPU 也能部署私有化大模型&#xff1f; 对&#xff0c;没错&#xff0c;只要你的电脑有个 8G 内存&#xff0c;你就可以轻松部署 Llama、Gemma、Qwen 等多种开源大模型。 非技术人员&#xff0c;安装 Docker、Docker-compose 很费劲&#xff1f; 不用&#xff0c;这些都不…

vue中路由来回切换页面直接卡死

今天发现一个很严重的问题&#xff0c;项目好不容易做好了&#xff0c;结果页面多了&#xff0c;切换之后卡死。页面所有的交互效果都失效了。 排查了许久的错误原因最后发现原来是路由名称重复了。 如上图当页面跳转到riskdetails详细页面之后&#xff0c;框架则被这个详情页…

SSE代替轮询?

什么是 SSE SSE&#xff08;Server-Sent Events&#xff0c;服务器发送事件&#xff09;&#xff0c;为特定目的而扩展的 HTTP 协议&#xff0c;用于实现服务器向客户端推送实时数据的单向通信。如果连接断开&#xff0c;浏览器会自动重连&#xff0c;传输的数据基于文本格式。…

高温下的稳定选择 —— PP消解管,耐化学更耐用

PP消解管&#xff0c;即聚丙烯材质的消解管&#xff0c;是一种常用于化学分析中的实验室设备&#xff0c;主要用于样品的消解处理。以下是PP消解管的一些主要特性和应用&#xff1a; 主要特性&#xff1a; 1. 耐化学腐蚀&#xff1a;PP材料对多数酸、碱和有机溶剂具有良好的耐…

Vue笔记-vue中使用JS创建的函数

主要是公司对前端要求不高&#xff0c;能解决问题就行了&#xff0c;前端不太熟&#xff0c;用js这种处理起来方便&#xff0c;在此记录下。 在src中创建一个api目录&#xff0c;新建custom.js export const getDivHeightByClass (className) > {let divElements docume…

MySQL数据库中文乱码处理

出现中文乱码之后处理方式 1、执行下面语句查看一下关于编码方式 show variables like %char%结果展示&#xff1a;【你应该和我的不一样】 2、如果你的和我查询结果不一致请设置成一致语句&#xff0c;根据自己需要复制语句 如下&#xff1a;【除了最后一条记录哈】 SET G…

mysql中的递归函数recursive

递归部门 WITH recursive dept_tree AS (SELECTsd.mine_id AS mine_id,sd.dept_id AS dept_id,sd.tenant_id AS tenant_id,sd.order_num,sd.dept_name AS topName,sd.dept_id AS topIdFROMsys_dept sdWHERE<!-- 加上or后也会查询出dept节点 sd.parent_id #{deptId} or sd.…

.net core 的缓存方案

这里主要讲两个缓存的使用&#xff0c;MemoryCache和Redis 先讲讲常见的缓存 1、.net framework web中自带有Cache缓存&#xff0c;这种缓存属于粘性缓存&#xff0c;是缓存到项目中的&#xff0c;项目从服务器迁移的时候缓存的内容也能够随着服务器一起迁移 2、MemoryCache缓存…

The First Descendant联机失败?第一后裔联机异常这样做

第一后裔/The First Descendant是一款由nexon开发的免费网游TheFirstDescendant第一后即将正式上线了&#xff0c;游戏的外观自定义系统还是非常不错的&#xff0c;人物角色可以选择不同风格的面部妆容&#xff0c;而且外观不仅可以更改颜色&#xff0c;还可以更改对应的材质和…

linux 控制台非常好用的 PS1 设置

直接上代码 IP$(/sbin/ifconfig eth0 | awk /inet / {print $2}) export PS1"\[\e[35m\]^o^\[\e[0m\]$ \[\e[31m\]\t\[\e[0m\] [\[\e[36m\]\w\[\e[0m\]] \[\e[32m\]\u\[\e[0m\]\[\e[33m\]\[\e[0m\]\[\e[34m\]\h(\[\e[31m\]$IP\[\e[m\])\[\e[0m\]\n\[\e[35m\].O.\[\e[0m\]…

65、基于卷积神经网络的调制分类(matlab)

1、基于卷积神经网络的调制分类的原理及流程 基于卷积神经网络&#xff08;CNN&#xff09;的调制分类是一种常见的信号处理任务&#xff0c;用于识别或分类不同调制方式的信号。下面是基于CNN的调制分类的原理和流程&#xff1a; 原理&#xff1a; CNN是一种深度学习模型&a…

如何用matplotlib绘制图像分类任务的类别特征空间分布

import matplotlib.pyplot as plt import numpy as np from sklearn.decomposition import PCA from sklearn.datasets import load_iris from mpl_toolkits.mplot3d import Axes3D# 加载示例数据&#xff08;Iris 数据集&#xff09; data load_iris() X data.data y data.…

SQLyog脚本无限试用重置脚本

文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie&#xff0c;但是网上的没看到很好使的&#xff0c;直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key&#xff0c;可能跟你的不一样&#xff0c;如果不一样&#xff0c;请替换…