当前位置: 首页 > news >正文

代码学习记录10

随想录日记part10

t i m e : time: time 2024.03.03



主要内容:今天的主要内容是深入了解数据结构中栈和队列,并通过三个 l e e t c o d e leetcode leetcode 题目深化认识。

  • 20. 有效的括号
  • 1047. 删除字符串中的所有相邻重复项
  • 150. 逆波兰表达式求值


Topic1有效的括号

题目
给定一个只包括 ′ ( ′ , ′ ) ′ , ′ ′ , ′ ′ , ′ [ ′ , ′ ] ′ '(',')','{','}','[',']' ()[] 的字符串 s s s ,判断字符串是否有效。
有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例
输入: s = " ( ) [ ] " s = "()[]{}" s="()[]"
输出: t r u e true true

思路: 括号匹配是使用栈解决的经典问题

先来分析一下 这里有三种不匹配的情况:

  • 1.字符串里左方向的括号多余
    请添加图片描述

  • 2.括号没有多余,但是括号的类型没有匹配上
    请添加图片描述

  • 3.字符串里右方向的括号多余
    请添加图片描述
    其 java代码的实现与解释如下:

      
class Solution {public boolean isValid(String s) {//建立堆栈Stack<Character> stack = new Stack<>();char ch;//如果s的长度不是偶数则无法匹配if(s.length()%2!=0)return false;for(int i=0;i<s.length();i++){ch=s.charAt(i);if(ch=='('){stack.push(')');}else if(ch=='{'){stack.push('}');}else if(ch=='['){stack.push(']');}else if(stack.isEmpty() || stack.peek()!=ch){return false;}else{stack.pop();}}return stack.isEmpty();}
}

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)


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

题目
给出由小写字母组成的字符串 S S S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S S S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

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

思路:

本题也是用栈来解决的经典题目,如下图:
请添加图片描述
其 java代码的实现与解释如下:

class Solution {public String removeDuplicates(String s) {//建立堆栈Stack<Character> stack = new Stack<>();char ch;for(int i=0;i<s.length();i++){ch=s.charAt(i);if(stack.isEmpty()==true){stack.push(ch);}else{if(ch==stack.peek())stack.pop();else{stack.push(ch);}}}String te="";while(stack.isEmpty()!=true){te=stack.pop()+te;}return te;}
}

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1),返回值不计空间复杂度



Topic3逆波兰表达式求值

题目
给你一个字符串数组 t o k e n s tokens tokens ,表示一个根据逆波兰表示法表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。

示例
输入: t o k e n s = [ " 2 " , " 1 " , " + " , " 3 " , " ∗ " ] tokens = ["2","1","+","3","*"] tokens=["2","1","+","3",""]
输出: 该算式转化为常见的中缀算术表达式为: ( ( 2 + 1 ) ∗ 3 ) = 9 ((2 + 1) * 3) = 9 ((2+1)3)=9

思路:

用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中
请添加图片描述)
java实现的代码如下:

cclass Solution {public int evalRPN(String[] tokens) {//建立堆栈Stack<Integer> stack = new Stack<>();for(String s:tokens){if("+".equals(s))stack.push(stack.pop()+stack.pop());else if("-".equals(s))stack.push(-stack.pop()+stack.pop());else if("*".equals(s))stack.push(stack.pop()*stack.pop());else if("/".equals(s)){int temp1 = stack.pop();int temp2 = stack.pop();stack.push(temp2 / temp1);}else stack.push(Integer.valueOf(s));}   return stack.pop();}
}

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

http://www.lryc.cn/news/313329.html

相关文章:

  • java——2024-03-03
  • Ubuntu安装conda以后,给jupyter安装C++内核
  • 【谈判】核心思想(抓大放小)
  • 洛谷P5908 猫猫和企鹅 做题反思(2024.3.7)
  • 常见的验证码
  • 11. C语言标准函数库
  • 2016年认证杯SPSSPRO杯数学建模C题(第一阶段)如何有效的抑制校园霸凌事件的发生解题全过程文档及程序
  • 设计模式-抽象工厂模式实践案例
  • 用readproc函数读取进程的状态
  • 在高并发、高性能、高可用 三高项目中如何设计适合实际业务场景的分布式id(一)
  • redis最新版本在Windows系统上的安装
  • 【深度优先】【图论】【C++算法】2045. 到达目的地的第二短时间
  • 思维题(蓝桥杯 填空题 C++)
  • Meta的Llama2模型已上线!但我为何更推荐你从HuggingFace获取?还有Code Llama等你来解锁!
  • CAN总线及通讯的工作原理
  • linux下修改网卡MAC地址
  • 47、WEB攻防——通用漏洞Java反序列化EXP生成数据提取组件安全
  • phpstorm console xdebug
  • Vue template到render过程
  • 【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 CSS常用属性
  • Golang 写日志到文件
  • 数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。
  • 运维随录实战(5)之centos搭建jenkins
  • css clip-path polygon属性实现直角梯形
  • Manz高压清洗机S11-028GCH-High Quality Cleaner 操作使用说明492页
  • 图像处理与视觉感知---期末复习重点(2)
  • 【机器学习】三要素——数据、模型、算法
  • Spring框架Bean对象的五个作用域
  • IoT数据采集网关在企业应用中扮演着关键角色-天拓四方
  • 【动态规划】完全背包