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

栈容器的应用

第一题:

用数组来模拟栈:

题解代码:

class Solution {
public:string removeDuplicates(string s) {// 用数组模拟栈string s1;for (int i = 0; i < s.size(); i++) {if(s1.size() == 0){s1+=s[i];}else if (s1.back() == s[i]) {s1.pop_back();} elses1 += s[i];}return s1;}
};

 第二题:

还是数组模拟栈

题解代码:

class Solution {
public:bool backspaceCompare(string s, string t) {//同样的用数组来模拟string s1,s2;for(const auto& e:s){//当不为空并且e == #时才尾删if(s1.size()&&e == '#'){s1.pop_back();}//不能将#也➕到串中else if(e != '#') s1+=e;}for(const auto& e:t){if(s2.size()&&e == '#'){s2.pop_back();}else if(e!='#')s2+=e;}return s1 == s2;// if(s1.size() == 0&&s2.size() == 0){//     return true;// }// else if(s1.size()!= s2.size()){//     return false;// }// else {//     int i = 0;//     while(i<s1.size()){//         if(s1[i] == s2[i]) i++;//         else return false;//     }// }// return true;} 
};

第三题:

表达式求值

算法原理:

 题解代码:

class Solution {
public:int calculate(string s) {//数组模拟vector<int> st;char op = '+';int i =0;int n = s.size();while(i<n){if(s[i] == ' '){i++;}//数字else if(s[i]>='0'&&s[i]<='9'){int tem = 0;while(i<n&&s[i]>='0'&&s[i]<='9'){tem = tem*10+(s[i++]-'0');}//此时的i指向的是非数字的元素if(op == '+') st.push_back(tem);if(op == '-') st.push_back(-tem);if(op == '*') st.back() *= tem;if(op == '/') st.back() /= tem;}else {op = s[i];i++;           }}int ret = 0;for(auto& e:st){ret+=e;}return ret;}
};

第四题:

题解思路:

 

题解代码:

这里我同样采用的vector来模拟栈 

class Solution {
public:string decodeString(string s) {vector<int> num;vector<string> st;st.push_back("");int i = 0;int n = s.size();while (i < n) {if (s[i] >= '0' && s[i] <= '9') {int tem = 0;while (i < n && s[i] >= '0' && s[i] <= '9')tem = tem * 10 + (s[i++] - '0');num.push_back(tem);}// i走到这表明不是数字了;else if (s[i] == '[') {i++; // 注意要先加1string s1;while (i < n && s[i] >= 'a' && s[i] <= 'z') {s1 += s[i++];}// 将s尾插到最后;st.push_back(s1);}// 走到这表明不是[;// 若是],就提出来进行解码else if (s[i] == ']') {// 将栈顶元素提出来;string tmp = st.back();st.pop_back();// 再提取栈顶的数字int nums = num.back();num.pop_back();// 重复;while (nums--) {st.back() += tmp;}i++; // 跳过这个右括号}// 这,纯字符else {string s1;while (i < n && s[i] >= 'a' && s[i] <= 'z') {s1 += s[i];i++;}st.back() += s1;}}return st.back();}
};

第五题:

验证栈序列:

题解思路:

1.将入栈序列挨个入栈;

2、判断出栈序列是否与栈顶元素相同,相同就出栈;

3、最后返回栈是否为空;

题解代码:

这里我还是用的vector来模拟的栈:

class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {vector<int> vt;int i = 0;for (const auto& e : pushed) {vt.push_back(e);while (vt.size() && vt.back() == popped[i]) {vt.pop_back();i++;}}return vt.empty();}
};


http://www.mrgr.cn/news/97026.html

相关文章:

  • SpringBoot项目Sa-token框架整合JWT
  • 【Linux网络与网络编程】03.UDP Socket编程
  • 虚拟电商-话费充值业务(六)话费充值业务回调补偿
  • 机器学习学习笔记
  • SpringBoot+vue前后端分离整合sa-token(无cookie登录态 详细的登录流程)
  • TRDI 公司的RiverPro 和 RioPro ADCP 用户指南
  • 生成对抗网络(GAN)详解(代码实现)
  • 【C++】Cplusplus进阶
  • 2025徘徊与坚守:在传统与变革间寻找自己
  • 基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)
  • RabbitMQ高级特性1
  • lodash库介绍(一个现代JavaScript实用工具库,提供模块化、性能优化和额外功能)JavaScript库(防抖、节流、函数柯里化)JS库
  • 【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
  • 前端Uniapp接入UviewPlus详细教程!!!
  • [Linux]从零开始的vs code交叉调试arm Linux程序教程
  • 容器的CPU
  • CAD插入属性块 弹窗提示输入属性值——CAD知识讲堂
  • GenerationMixin:_sample方法(GenerationMode.SAMPLE, GenerationMode.GREEDY_SEARCH)
  • [C语言入门] 结构体
  • 接口自动化学习二:session自动管理cookie