Leetcode刷题java之394. 字符串解码

深藏阁楼爱情的钟 2023-07-04 12:48 32阅读 0赞

执行结果:

通过

显示详情

执行用时 :5 ms, 在所有 Java 提交中击败了7.58% 的用户

内存消耗 :41.6 MB, 在所有 Java 提交中击败了5.04%的用户

题目:

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例:

s = “3[a]2[bc]“, 返回 “aaabcbc”.
s = “3[a2[c]]“, 返回 “accaccacc”.
s = “2[abc]3[cd]ef”, 返回 “abcabccdcdcdef”.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

使用两个辅助栈

代码:

  1. class Solution {
  2. public String decodeString(String s) {
  3. StringBuilder res=new StringBuilder();
  4. int multi=0;
  5. Stack<Integer> multi_stack=new Stack<>();
  6. Stack<String> res_stack=new Stack<>();
  7. for(char c:s.toCharArray())
  8. {
  9. if(c>='0'&&c<='9')
  10. {
  11. //只有字符串才可以paseint
  12. multi=multi*10+Integer.parseInt(c+"");
  13. }else if(c=='[')
  14. {
  15. multi_stack.push(multi);
  16. res_stack.push(res.toString());
  17. multi=0;
  18. res=new StringBuilder();
  19. }else if(c==']')
  20. {
  21. StringBuilder temp=new StringBuilder();
  22. int cur_multi=multi_stack.pop();
  23. for(int i=cur_multi;i>0;i--)
  24. {
  25. temp.append(res);
  26. }
  27. res=new StringBuilder(res_stack.pop()+temp.toString());
  28. }else
  29. {
  30. res.append(c);
  31. }
  32. }
  33. return res.toString();
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,32人围观)

还没有评论,来说两句吧...

相关阅读

    相关 394. 字符串解码

    打卡!!!每日一题 今天给大家带来一道栈运算类型的题目。 栈运算类型的题目比较常见的题型有:括号匹配,表达式求值等。 我有一篇博客详细的介绍了栈运算的应用:[《leetC

    相关 394. 字符串解码(高频

    394. 字符串解码 解题思路 代码 解题思路 这题主要用到了栈,本题难点在于括号内嵌套括号,需要从内向外生成与拼接字符串,这与栈的先入后出特性对应。