算法日记day 13(删除字符串中的所有重复元素)

一、删除字符串中的所有重复元素

题目:

给出由小写字母组成的字符串 S重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

 思路:

初始化栈,将字符串中的元素分别加入栈中,每个元素加入栈时都与栈顶元素进行比较,如果相同则说明元素重复,栈顶元素弹出,继续遍历下一个元素,直到所有元素遍历完毕,此时栈中剩下的元素即为不重复的元素,但此时栈中元素的顺序与题目要求顺序相反,因此需要弹出栈中元素的同时赋给一个新的字符串。

代码:

public String removeDuplicates(String s) {// 使用双端队列来存储处理后的字符序列Deque<Character> deque = new LinkedList<>();char ch;// 遍历输入的字符串 sfor (int i = 0; i < s.length(); i++) {ch = s.charAt(i);// 如果双端队列为空或者栈顶元素不等于当前字符,则将当前字符压入栈中if (deque.isEmpty() || deque.peek() != ch) {deque.push(ch);} else {// 如果栈顶元素等于当前字符,则移除栈顶元素,表示移除相邻重复的字符deque.pop();}}// 将双端队列中的字符转换为最终的字符串结果String str = "";while (!deque.isEmpty()) {str = deque.pop() + str;}// 返回去重后的字符串return str;
}

二、逆波兰表达式求值

什么是逆波兰表达式?

逆波兰表达式(Reverse Polish Notation,RPN)是一种用于表示数学表达式的格式,它与传统的中缀表达式有所不同。在逆波兰表达式中,运算符在操作数的后面而不是中间,这样可以避免使用括号来指定运算符的优先级。相当于二叉树的后序遍历。

特点和优点:

  1. 无需括号:逆波兰表达式不需要括号来指定运算符的优先级,因为操作符与操作数的顺序已经明确。

  2. 后缀表达式:逆波兰表达式也被称为后缀表达式,因为操作符跟在操作数的后面。

  3. 易于计算:逆波兰表达式可以直接由计算机执行,而无需像中缀表达式那样进行优先级和结合性的复杂处理。

举例说明:

考虑一个简单的数学表达式 (3 + 4) * 5,其对应的逆波兰表达式为 3 4 + 5 *

  • 在逆波兰表达式中:
    • 3 和 4 是操作数。
    • + 是加法操作符,作用于前面的两个操作数。
    • 5 是另一个操作数。
    • * 是乘法操作符,作用于前面的结果和最后一个操作数。

实现逆波兰表达式的计算:

使用栈来实现逆波兰表达式的计算是常见的方法:

  1. 遍历逆波兰表达式

    • 遇到操作数时,压入栈中。
    • 遇到操作符时,从栈中弹出对应数量的操作数,进行计算,并将结果压入栈中。
  2. 计算最终结果

    • 遍历结束后,栈中唯一的元素即为整个表达式的计算结果。

 

题目:

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

示例 3:

输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
输出:22
解释:该算式转化为常见的中缀算术表达式为:((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

思路:可利用栈结构进行操作

代码:

public int evalRPN(String[] tokens) {// 使用双端队列实现栈Deque<Integer> deque = new LinkedList<>();// 遍历逆波兰表达式的每个元素for (String s : tokens) {// 如果是加法操作符if ("+".equals(s)) {// 弹出栈顶两个元素相加,结果压入栈中deque.push(deque.pop() + deque.pop());} // 如果是减法操作符else if ("-".equals(s)) {// 弹出栈顶两个元素,做减法运算,结果压入栈中deque.push(-deque.pop() + deque.pop());} // 如果是乘法操作符else if ("*".equals(s)) {// 弹出栈顶两个元素相乘,结果压入栈中deque.push(deque.pop() * deque.pop());} // 如果是除法操作符else if ("/".equals(s)) {// 弹出栈顶两个元素,做除法运算,结果压入栈中int num1 = deque.pop();int num2 = deque.pop();deque.push(num2 / num1);} // 如果是操作数(数字)else {// 将操作数转换为整数并压入栈中deque.push(Integer.valueOf(s));}}// 返回栈中剩余的唯一元素,即为计算结果return deque.pop();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全防御2

实验要求&#xff1a; 实验过程&#xff1a; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换)&#xff1a; 新建电信区&#xff1a; 新建移动区&#xff1a; 将对应接口划归到各自区域&#xff1a; 新建…

Python 字典全面总结

Python 字典简介 Python 内置了字典&#xff1a;dict 的支持&#xff0c;dict 全称 dictionary&#xff0c;在其他语言中也称为 map&#xff0c;使用键-值&#xff08;key-value&#xff09;存储&#xff0c;具有极快的查找速度。 这种 key-value 存储方式&#xff0c;在放进…

JVM--自动内存管理--JAVA内存区域

1. 运行时数据区域 灰色的线程共享&#xff0c;白色的线程独享 白色的独享就是根据个体"同生共死" 程序计数器&#xff1a; 是唯一一个没有OOM(内存溢出)的地方 是线程独享的 作用&#xff1a; 是一块较小的内存空间,是当前线程所执行的字节吗的行号指示器 由于…

云监控(华为) | 实训学习day2(10)

spring boot基于框架的实现 简单应用 - 用户数据显示 开发步骤 第一步&#xff1a;文件-----》新建---项目 第二步:弹出的对话框中,左侧选择maven,右侧不选任何内容. 第三步&#xff0c;选择maven后&#xff0c;下一步 第4步 &#xff1a;出现对话框中填写项目名称 第5步&…

NSGA和MOGA 算法的异同点

NSGA&#xff08;Nondominated Sorting Genetic Algorithm&#xff09;和 MOGA&#xff08;Multi-Objective Genetic Algorithm&#xff09;都是用于多目标优化的进化算法。它们通过模拟自然选择和遗传操作来寻找优化问题的Pareto前沿&#xff0c;即在多个目标之间达到最佳折衷…

jail子系统里升级Ubuntu focal到jammy

Ubuntu focal是20.04 &#xff0c;jammy版本是22.04&#xff0c;本次的目的就是将FreeBSD jail子系统里的Ubuntu 从20.04升级到22.04 。这个focal 子系统是通过cbsd克隆得到的。使用CBSD克隆复制Ubuntu jail子系统环境-CSDN博客 do-release-upgrade升级没成功&#xff0c;用de…

(最新亲测有效)python中操作json文件追加数据

一、前言 最近想用json存储接口关联的变量数据&#xff0c;查了一下网上许多伙伴的文章&#xff0c;最后总是某个地方容易报错。最后发现还是大部分网友摘抄别人的细节问题&#xff0c;所以自己记录一下。 二、操作流程 这里我也是初学者自学&#xff0c;暂时了解到的一些内容&…

STM32 产生Hard Fault 调试方法

STM32 产生hard-fault 调试方法 当STM32 产生Hard Fault的时候可以打印出一些重要的寄存器信息&#xff0c;然后定位代码出错的地方。 https://github.com/ferenc-nemeth/arm-hard-fault-handler 下面是核心代码。 void HardFault_Handler(void) {__asm volatile("TST …

全面了解不同GPU算力型号的价格!

这两年人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、深度学习和高性能计算&#xff08;HPC&#xff09;领域的快速发展&#xff0c;GPU算力已成为不可或缺的资源。企业、研究机构乃至个人开发者越来越依赖于GPU加速计算来处理大规模数据集和复杂模…

如何将大模型应用到自己的业务中?7种大模型应用方式和代表论文总结

如何将大模型应用落地到自己的业务或工作中&#xff1f;这篇文章整理了7种目前业内最常用的大模型应用方法&#xff0c;以及各个方法的代表论文。通过对各种应用大模型方法的特点对比&#xff0c;找到最适合自己场景的应用方法。 1 Pretrain-Finetune 直接针对下游任务进行全…

Linux介绍和文件管理

一Linux的起源 1.Unix Dennis Ritchie和Ken Thompson发明了C语言&#xff0c;而后写出了Unix的内核 2.Minix MINIX是一种基于微 内核架构的类UNIX计算机操作系统&#xff0c;由 Andrew S. Tanenbaum发明 3.Linux内核 芬兰赫尔辛基大学的研究生Linus Torvalds基于Gcc、 ba…

分布式存储之 ceph 管理操作

一.资源池 Pool 管理 我们已经完成了 Ceph 集群的部署&#xff0c;但是我们如何向 Ceph 中存储数据呢&#xff1f;首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区&#xff0c;Pool 由…

ELK日志收集

一、什么是ELK ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体&#xff0c;ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案。 ELK 的好处&#xff1a; ELK 组件在大数据运维系统中&#xff0c;主要可解决的问题如下&…

适用于 Android 的恢复应用程序合集分享

丢失重要文件或数据从来都不是一件有趣的事。这种情况可能发生在您的计算机和笔记本电脑上&#xff0c;也可能发生在您的 Android 智能手机或平板电脑上。然而&#xff0c;尽管 Android 用户可能认为在这种情况下他们可用的选择较少&#xff0c;但用于 Android 数据恢复的应用程…

自定义注解 + Redis 实现业务的幂等性

1.实现幂等性思路 实现幂等性有两种方式&#xff1a; ⭐ 1. 在数据库层面进行幂等性处理&#xff08;数据库添加唯一约束&#xff09;. 例如&#xff1a;新增用户幂等性处理&#xff0c;username 字段可以添加唯一约束. ⭐ 2. 在应用程序层面进行幂等性处理. 而在应用程序…

C#医学影像管理系统源码(VS2013)

目录 一、概述 二、系统功能 系统维护 工作站 三、功能介绍 影像采集 统计模块 专业阅片 采集诊断报告 报告管理 一、概述 医学影像存储与传输系统&#xff08;PACS&#xff09;是一种集成了影像存储、传输、管理和诊断功能的系统。它基于数字化成像技术、计算机技术和…

大模型+编程,未来程序员躺平还是失业?

自然语言大模型编程可以更好地理解用户的需求&#xff0c;然后输出对应代码。 最近英伟达让AI自动写代码的开源神器已上线&#xff0c;Nvidia推出了Code Llama在线体验页面&#xff0c;Code Llama 是 Llama 2 的代码专用版本&#xff0c;无需注册&#xff0c;无需本地部署&…

Jangow

关于靶场环境配置&#xff0c;确实这个靶场存在很大的问题&#xff0c;不仅仅是网络的配置问题&#xff0c;更重要的是明知道如何修改网络环境配置&#xff0c;但是键盘存在很大的问题。许多字符输入不一致。 Vulnhub靶场&#xff0c;Jangow靶机环境找不到ip解决方法。_jangow…

基于springboot新生宿舍管理系统

系统背景 在当今高等教育日益普及的时代背景下&#xff0c;高校作为知识传播与创新的重要基地&#xff0c;其基础设施的智能化管理显得尤为重要。新生宿舍作为大学生活的起点&#xff0c;不仅是学生日常生活与学习的重要场所&#xff0c;也是培养学生独立生活能力和团队合作精神…

hive动态分区导致xceivercount超限,hdfs无法创建新连接

目录 一、事件复盘&#xff1a; 二、解决方案&#xff1a; 三、讨论 一、事件复盘&#xff1a; hdfs无法创建新的文件&#xff0c;xceivercount超过最大设置&#xff0c;平时每个datanode只有100个左右的连接&#xff0c;突然达到8000以上。 事故原因&#xff0c;跨多天的…