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

【C++算法】68.栈_字符串解码

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

394. 字符串解码


题目描述:

d1f0c4251a355db4bbbb428a2c1652e5


解法

用栈来模拟。

两个栈,一个放字符串一个放数字。

d9766f5eb90ca65f61fe3416c7d46fb1

4866624b243a43945d3e3e0c8f542a59

51652a5e624baae8855af29897d0f83e

然后就遇到第一个右括号了,把两个栈的栈顶拿出来,

1b9b3d402aa47fa7f7a9141b02d564d4

接着把bcbc放到原来栈顶元素的后面

88f5aadd50c238b34616447f2cfb4837

然后把abcbc拿出来,就变成空串了,所以有个细节就是字符串的栈里面要先放入一个空串。

接下来遇到de,就直接放到栈顶元素的后面,因为没有右括号就不需要重复。

继续执行,最后弹出string的栈顶元素。


C++ 算法代码:

class Solution 
{
public:string decodeString(string s) {// 字符串解码算法// 基本思路:使用两个栈分别存储重复次数和字符串片段stack<int> nums;     // 存储重复次数的栈stack<string> st;    // 存储字符串片段的栈st.push("");         // 初始化字符串栈,放入空字符串作为起始int i = 0, n = s.size();  // i是当前处理位置,n是字符串长度while(i < n){if(s[i] >= '0' && s[i] <= '9')  // 处理数字(重复次数){// 提取完整的数字int tmp = 0;while(i < n && s[i] >= '0' && s[i] <= '9'){tmp = tmp * 10 + (s[i] - '0');i++;}nums.push(tmp);  // 将数字压入数字栈}else if(s[i] == '[')  // 处理左括号{i++;  // 跳过左括号// 提取左括号后的字母字符串string tmp = "";while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp += s[i];i++;}st.push(tmp);  // 将提取的字符串压入字符串栈}else if(s[i] == ']')  // 处理右括号,表示一个编码片段结束{// 弹出当前字符串片段和对应的重复次数string tmp = st.top();st.pop();int k = nums.top();nums.pop();// 将字符串重复k次,并添加到栈顶字符串末尾while(k--){st.top() += tmp;}i++;  // 跳过右括号}else  // 处理普通字母字符{// 提取连续的字母字符string tmp;while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp += s[i];i++;}st.top() += tmp;  // 将提取的字符串添加到栈顶字符串末尾}}return st.top();  // 返回最终解码后的字符串}
};

相关文章:

  • 学习vue3:监听器
  • 统一端点管理(UEM):定义、优势与重要性
  • React 第四十三节 Router中 useBlocker 的使用详解及案例注意事项
  • 游戏引擎学习第298天:改进排序键 - 第1部分
  • Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?
  • 宿州金博学校开展防震演练:夯实安全根基,守护校园平安
  • 机器学习算法-聚类K-Means
  • 凸优化系列——First-order method
  • RestFul操作ElasticSearch:索引与文档全攻略
  • DeepSpeed简介及加速模型训练
  • Spring Boot中如何使用RabbitMQ?
  • 【Go-2】基本语法与数据类型
  • Qt动态生成 UI
  • 零基础深入解析 ngx_http_session_log_module
  • 系统架构设计师软考要点分析及知识学习指南
  • 【Python装饰器深潜】从语法糖到元编程的艺术
  • 人工智能如何做主题班会PPT?
  • 量子计算的曙光:从理论奇点到 IT 世界的颠覆力量
  • 鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍
  • 【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动
  • 国台办:不管台湾地区领导人讲什么,都改变不了台湾是中国一部分的地位和事实
  • 国家发改委:大部分稳就业稳经济政策将在6月底前落地
  • 63岁微波遥感领域著名专家李春升参加学术会议期间病逝
  • 女巫的继承者们
  • 人民日报评论员:党政机关要带头过紧日子
  • 中国田径巡回赛西安站完赛:男子跳远石雨豪夺冠