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

leetcode hot100【LeetCode 394.字符串解码】java实现

LeetCode 394.字符串解码

题目描述

给定一个经过编码的字符串,编码规则为 k[encoded_string],其中 encoded_string 中的每个字符都会重复 k 次。编写一个函数来解码这个字符串。

示例 1:

输入:s = "3[a]2[bc]", 返回 "aaabcbc".

示例 2:

输入:"3[a2[c]]", 返回 "accaccacc".

示例 3:

"2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

示例 4:

"abc3[cd]xyz", 返回 "abccdcdcdxyz".

Java 实现代码

class Solution {public String decodeString(String s) {Stack<Integer> countStack = new Stack<>();Stack<StringBuilder> resultStack = new Stack<>();StringBuilder current = new StringBuilder();int k = 0;for (char ch : s.toCharArray()) {if (Character.isDigit(ch)) {// 处理连续数字k = k * 10 + (ch - '0');} else if (ch == '[') {// 遇到 '[',将当前结果和倍数压栈countStack.push(k);resultStack.push(current);// 重置 k 和 currentk = 0;current = new StringBuilder();} else if (ch == ']') {// 遇到 ']',从栈中弹出倍数和之前的字符串int repeatTimes = countStack.pop();StringBuilder decoded = resultStack.pop();// 将当前字符串重复 repeatTimes 次后附加回去for (int i = 0; i < repeatTimes; i++) {decoded.append(current);}current = decoded;} else {// 处理普通字符current.append(ch);}}return current.toString();}
}

解题思路

这个问题可以通过使用栈来解决。我们遍历字符串,使用一个栈来存储中间结果,以及一个计数器来记录数字。当遇到 [ 时,我们将当前的字符串和数字压入栈中,并重置计数器和当前字符串。当遇到 ] 时,我们从栈中弹出数字和之前的字符串,并将当前字符串重复相应的次数,并与之前的字符串拼接。最后,返回栈顶的字符串。

复杂度分析

  • 时间复杂度:O(N),其中 N 是字符串 s 的长度。因为我们需要遍历字符串中的每个字符。
  • 空间复杂度:O(N),在最坏的情况下,我们可能需要将整个字符串存储在栈中。

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

相关文章:

  • WPF+MVVM案例实战(十)- 水波纹按钮实现与控件封装
  • 解决VMware虚拟机的字体过小问题
  • 超流畅的精简版Win10系统:仅占4GB,流畅稳定
  • Flutter升级与降级
  • 2024年最优秀五大项目管理软件,大厂项目经理都在用
  • Vue 组件之间通信的多种方式汇总
  • Vue脚手架
  • shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
  • 前端存储IndexedDB存储方式实战案例
  • rhcsa 第二次作业
  • mysql 巧妙的索引
  • Windows Active Directory技术介绍和应用——删除计算机对象
  • GD32实战篇-移远EC800M进行TCP/UDP连接测试-上位机测试
  • C语言常用的数据类型有哪些?
  • 使用串口监视器查看是否有错误信息
  • Python小游戏15——俄罗斯方块
  • 什么是JVM
  • Vue3中props的使用方法以及例子
  • OpenCV图像处理方法:腐蚀操作
  • flutter实战短视频课程
  • docker 相关操作命令
  • 前端项目代码风格及校验统一格式化配置
  • 代码随想录算法训练营第十三天|二叉树的递归遍历、 二叉树的迭代遍历、二叉树的层次遍历
  • 常见学习陷阱及解决方案
  • 认识线程 — JavaEE
  • 论文精读:Approximating Maximin Share Allocations(上)