算法day24

ops/2024/10/17 22:18:01/

第一题

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

   解法:利用数组来模拟一下栈

        

        对于上述字符串转换为字符数组,通过模拟栈的操作来解决这道题,当栈为空时下一位字符直接进行入栈操作,当当前数组中要入栈的字符和栈顶的字符相同时,进行出栈操作,同时字符数组进行向后移动一位的操作,一直这样进行,直到循环完整个字符串;

        总综上所述,代码如下: 解法:利用数组来模拟一下栈

class Solution {public String removeDuplicates(String s) {StringBuffer ret = new StringBuffer();char[] s1 = s.toCharArray();for(char ch : s1){if(ret.length() >0 && ch ==ret.charAt(ret.length() - 1)){//出栈ret.deleteCharAt(ret.length() - 1);}else{//进栈ret.append(ch);}}return ret.toString();}
}

第二题

        844. 比较含退格的字符串

 解法:利用数组来模拟一下栈

         对于上述字符串转换为字符数组,通过模拟栈的操作来解决这道题,当入栈的字符不是#时,直接进行入栈操作,当当前数组中要入栈的是#也栈顶的字符相同是,进行出栈操作,同时字符数组进行向后移动一位的操作,一直这样进行,直到循环完整个字符串;

        总综上所述,代码如下: 

class Solution {public boolean backspaceCompare(String s, String t) {return backret(s).equals(backret(t));}public String backret(String s1){StringBuffer ret = new StringBuffer();char[] s2 = s1.toCharArray();for(char ch: s2 ){if(ch != '#') ret.append(ch);elseif(ret.length() > 0) {ret.deleteCharAt(ret.length()-1);}}return ret.toString();}
}

第三题

227. 基本计算器 II

本题的类型:表达式求值;

方法:利用栈来模拟计算过程

步骤如下:

步骤一:将原始字符串转换为字符数组

        我们开始进行遍历数组,当遇到操作符时,要进行更新操作符变量op;

步骤二:

        遇到数字,首先使用tmp变量方便完整的记录数字;

步骤三:

        根据遇到的符号,处理不停的逻辑:

        如果遇到的是“+”符号,将tmp直接进行入栈操作;

         如果遇到的是“-”符号,将-tmp直接进行入栈操作;

        如果遇到的是“*”符号,将tmp直接乘到栈顶的元素上;

         如果遇到的是“/”符号,将tmp直接除到栈顶的元素上;

步骤四:

        将栈里面的所有数进行相加操作,得到结果并返回;

综上诉述,代码如下:

class Solution {public int calculate(String s) {Deque<Integer> st = new ArrayDeque<>();char op = '+';int i = 0,n = s.length();char[] s1 = s.toCharArray();while(i < n){if(s1[i] == ' ') i++;else 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++;}if(op == '+') st.push(tmp);else if(op == '-') st.push(-tmp);else if(op == '*') st.push( st.pop() * tmp);else st.push(st.pop() / tmp);}else{op = s1[i];i++;}}int ret = 0;while(!st.isEmpty()){ret += st.pop();}return ret;}
}

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


http://www.ppmy.cn/ops/48059.html

相关文章

实验七、创建小型实验拓扑《计算机网络》

早检到底是谁发明出来的。 一、实验目的 完成本实验后&#xff0c;您将能够&#xff1a; • 设计逻辑网络。 • 配置物理实验拓扑。 • 配置 LAN 逻辑拓扑。 • 验证 LAN 连通性。 二、实验任务 在本实验中&#xff0c;将要求您连接网络设备并配置主机实现基本的网络…

elasticsearch安装与使用(2)-基于term匹配的简单搜索引擎搭建

把一篇pdf论文解析后&#xff0c;放入es数据库中&#xff0c;建立倒排索引表&#xff0c;并实现简单搜索。 1、pdf论文解析(英文) 安装pdf解析包 pip install pdfminer.sixdef extract_text_from_pdf(filename, page_numbersNone, min_line_length1):从pdf文件中提取文字:pa…

【Java刷题】二叉树

相同的树 public boolean isSameTree(TreeNode p, TreeNode q) {if(p null && q null) {return true;} else if(p ! null && q ! null) {if(p.val ! q.val) {return false;} else {return isSameTree(p.left, q.left) && isSameTree(p.right, q.rig…

设计模式-工厂方法(创建型)

创建型-工厂方法 简单工厂 将被创建的对象称为“产品”&#xff0c;将生产“产品”对象称为“工厂”&#xff1b;如果创建的产品不多&#xff0c;且不需要生产新的产品&#xff0c;那么只需要一个工厂就可以&#xff0c;这种模式叫做“简单工厂”&#xff0c;它不属于23中设计…

Java线程死锁

在Java中&#xff0c;线程死锁通常发生在两个或更多个线程相互等待对方释放资源的情况下。以下是一个简单的Java示例&#xff0c;展示了如何创建线程死锁&#xff1a; public class DeadlockDemo {// 定义两个资源private static Object resource1 new Object();private stat…

The Israeli-Palestinian conflict

目录 历史背景现代冲突的起源关键战争和事件巴勒斯坦内战和平进程和持续的冲突近年的局势 历史背景 古代历史&#xff1a;以色列和巴勒斯坦地区的历史可以追溯到几千年前。古代以色列王国和犹太人以及其他民族都在这片土地上生活过。 奥斯曼帝国&#xff1a;从16世纪到20世纪初…

51 单片机[6]:矩阵键盘及密码锁

一、认识矩阵键盘 在键盘中按键数量较多时&#xff0c;为了减少I/O口的占用&#xff0c;通常将按键排列成矩阵形式 采用逐行或逐列的“扫描”&#xff0c;就可以读出任何位置按键的状态 扫描的概念 数码管扫描&#xff08;输出扫描&#xff09; 原理&#xff1a;显示第1位→显…

ON DUPLICATE KEY UPDATE 子句

ON DUPLICATE KEY UPDATE 是 MySQL 中的一个 SQL 语句中的子句&#xff0c;主要用于在执行 INSERT 操作时处理可能出现的重复键值冲突。当尝试插入的记录导致唯一索引或主键约束冲突时&#xff08;即试图插入的记录的键值已经存在于表中&#xff09;&#xff0c;此子句会触发一…