算法刷题Day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

本文主要是介绍算法刷题Day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 0 引言
  • 1 有效的括号
    • 1.1 我的解题
  • 2 删除字符串中的所有相邻重复项
    • 2.1 我的解题
  • 3 逆波兰表达式求值
    • 3.1 我的解题

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

0 引言

1 有效的括号

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:简单

1.1 我的解题

class Solution {
public:bool isValid(string s) {stack<char> myStack;// 遇到左括号压栈,遇到右括号则判断与栈顶元素是否构成一对,构成一对则出栈否则压栈for (auto subS : s){if (subS == '(' || subS == '[' || subS == '{'){myStack.push(subS);}else if (subS == ')'){// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '('){myStack.pop();}else{myStack.push(subS);}}else if (subS == ']'){// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '['){myStack.pop();}else{myStack.push(subS);}}else{// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '{'){myStack.pop();} else{myStack.push(subS);}}}return myStack.empty();}
};

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

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:简单

2.1 我的解题

class Solution {
public:string removeDuplicates(string s) {// 逻辑类似消消乐,遇到相同的元素则删除stack<char> myStack;for (auto subS : s){// 判断新压栈的元素和栈顶元素是否相等,如果相等,则pop栈顶元素if (!myStack.empty() && myStack.top() == subS){myStack.pop();}else{myStack.push(subS);}}//此时要将字符串按顺序输出,则还需要借助一个栈(或者直接使用string的翻转字符串函数 reverse )stack<char> outStack;int size = myStack.size();for (int i = 0; i < size; i++){outStack.push(myStack.top());myStack.pop();}string result;for (int i = 0; i < size; i++){result.push_back(outStack.top());outStack.pop();}return result;}
};

3 逆波兰表达式求值

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:知道规则了也不难

3.1 我的解题

逆波兰表达式求值的规则:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶的两个数字出栈,进行运算(第二个出栈的元素 运算符 第一个出栈的元素),运算结果进栈,一直到获得最终结果。

回顾点:字符串转换为 int 类型的函数 atoi(s.c_str()) ,不然还得手动转换

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> calculate;int leftNumber = 0, rightNumber = 0;for (auto s : tokens){// 遇到数字就入栈if (s != "+" && s != "-" && s != "*" && s != "/"){// 将字符串转换为数字calculate.push(atoi(s.c_str()));continue;}// 遇到运算符就取出栈顶两个元素进行运算,然后再将结果入栈rightNumber = calculate.top();calculate.pop();leftNumber = calculate.top();calculate.pop();if (s == "+"){calculate.push(leftNumber + rightNumber);}else if (s == "-"){calculate.push(leftNumber - rightNumber);}else if (s == "*"){calculate.push(leftNumber * rightNumber);}else{calculate.push(leftNumber / rightNumber);}}return calculate.top();}
};int main()
{vector<string> tokens = { "10","6","9","3","+","-11","*","/","*","17","+","5","+" };Solution test;int result = test.evalRPN(tokens);cout << result;
}

这篇关于算法刷题Day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814872

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件