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

【C++算法】栈

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

  • 题目链接

删除字符中的所有相邻重复项icon-default.png?t=O83Ahttps://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/

  • 算法原理

  • 代码展示
class Solution 
{
public:string removeDuplicates(string s) {string ret;for(int i = 0; i < s.size(); i++){if(!ret.empty() && ret.back() == s[i]){ret.pop_back();}else{ret += s[i];}}return ret;}
};

比较含退格的字符串

  • 题目链接

比较含退格的字符串icon-default.png?t=O83Ahttps://leetcode.cn/problems/backspace-string-compare/description/

  • 算法原理

解法:用栈思想模拟即可

  • 代码展示
class Solution 
{
public:bool backspaceCompare(string s, string t) {return comString(s) == comString(t);}string comString(string s){string ret;for(auto ch : s){if(ch != '#') {ret += ch;} else{if(!ret.empty()){ret.pop_back();}}}return ret;}
};

基本计算器

  • 题目链接

基本计算器icon-default.png?t=O83Ahttps://leetcode.cn/problems/basic-calculator-ii/description/

  • 算法原理

  • 代码展示
class Solution 
{
public:int calculate(string s) {stack<int> st;char op = '+';int i = 0, n = s.size();while(i < n){if(s[i] == ' '){i++;}else if(i < n && s[i] >= '0' && s[i] <= '9'){int tmp = 0;while(i < n && s[i] >= '0' && s[i] <= '9'){tmp *= 10;tmp += s[i++] - '0';}if(op == '+'){// 直接入栈st.push(tmp);}else if(op == '-'){// -tmp入栈st.push(-tmp);}else if(op == '*'){// tmp乘栈顶元素,并放在栈顶st.top() *= tmp;}else{// 栈顶元素除tmp,并放在栈顶st.top() /= tmp;}}else{op = s[i++];}}int ret = 0;while(st.size()){ret += st.top();st.pop();}return ret;}
};

字符串解码

  • 题目链接

字符串解码icon-default.png?t=O83Ahttps://leetcode.cn/problems/decode-string/description/

  • 算法原理

  • 代码展示
class Solution 
{
public:string decodeString(string s) {stack<string> str;stack<int> num;str.push("");int i = 0, n = s.size();while(i < n){if(i < n && s[i] >= '0' && s[i] <= '9'){int tmp = 0;while(i < n && s[i] >= '0' && s[i] <= '9'){tmp *= 10;tmp += s[i++] - '0';}num.push(tmp);}else if(i < n && s[i] == '['){i++;string tmp;while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp += s[i++];}str.push(tmp);}else if(i < n && s[i] == ']'){i++;int tmpNum = num.top();num.pop();string tmpString = str.top();while(--tmpNum){str.top() += tmpString;}tmpString = str.top();str.pop();str.top() += tmpString;}else{str.top() += s[i++];}}return str.top();}
};

验证栈序列

  • 题目链接

验证栈序列icon-default.png?t=O83Ahttps://leetcode.cn/problems/validate-stack-sequences/description/

  • 算法原理

  • 代码展示
class Solution 
{
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> ret;int i = 0, n = popped.size();for(auto x : pushed){ret.push(x);while(i < n && ret.size() && popped[i] == ret.top()){ret.pop();i++;}}return i == n;}
};


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

相关文章:

  • 【含文档】基于Springboot+微信小程序 的高校心理咨询系统(含源码+数据库+lw)
  • 灰度重心法求取图像重心
  • C/C++语言基础--C++运算符重载以及其重载限制
  • 设计模式 之 —— MVC模式
  • uniapp 通过标签生成海报
  • 如何在C++中使用Poppler库读取PDF文件(二)
  • 计算机知识科普问答--21(101-105)
  • ubuntu20.04系统安装zookeeper简单教程
  • 为什么这款智能在线派单软件成为行业首选?
  • rust的nutyp验证和validator验证数据的方法
  • Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架。它是 Spring 项目家族的一员,用于构建安全的 Java 应用程序。
  • 32 C 语言指针的长度与运算(指针加减整数、指针自增自减、同类型指针相减、指针的比较运算)
  • 【C++】 vector 迭代器失效问题
  • 复习linux网络编程
  • qt xml解析与处理
  • 使用asio 接收ps流代码并显示
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • 高考技术——pandas使用
  • 指令个人记录
  • 废品回收小程序:回收更加便捷!