394. 字符串解码

冷不防 2022-11-27 15:56 244阅读 0赞

题目:

394. 字符串解码
在这里插入图片描述

题解:

  1. 1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出现次数,并将之前的 string 连接起来,再次压栈;
  2. 2. 如果遇到数字、字母、'['就直接压栈;
  3. 3. 最后将栈里的字符串弹出,并连接起来就ok了;

代码:

  1. import java.util.*;
  2. public class code394 {
  3. // 1. 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来,然后将 '['前面的数字作为出现次数,并将之前的 string 连接起来,再次压栈;
  4. // 2. 如果遇到数字、字母、'['就直接压栈;
  5. // 3. 最后将栈里的字符串弹出,并连接起来就ok了;
  6. public static String decodeString(String s) {
  7. Stack<String> stack = new Stack<String>();
  8. for(int i = 0; i < s.length(); i++)
  9. {
  10. if(s.charAt(i) == ']') // 如果遇到 ']',就一直在栈中找到 '[',将之间的字符连接起来
  11. {
  12. String string = "";
  13. while(!stack.peek().equals("["))
  14. {
  15. string = stack.pop() + string; // stack.pop() 与 string 不能互换,因为栈是先进后出的,会反转原来的字符串
  16. }
  17. stack.pop();
  18. String countString = "";
  19. while((!stack.isEmpty()) && (stack.peek().charAt(0) >= '0' && stack.peek().charAt(0) <= '9'))
  20. {
  21. countString = stack.pop() + countString; // 然后将 '['前面的数字作为出现次数
  22. }
  23. int count = Integer.parseInt(countString);
  24. String tempString = "";
  25. for(int j = 0; j < count; j++)
  26. {
  27. tempString = tempString + string; // 并将之前的 string 连接起来
  28. }
  29. stack.push(tempString); // 再次压栈
  30. }
  31. else // 如果遇到数字、字母、'['就直接压栈
  32. {
  33. String str = String.valueOf(s.charAt(i));
  34. stack.push(str);
  35. }
  36. }
  37. String res = "";
  38. while(!stack.isEmpty())
  39. {
  40. res = stack.pop() + res; // 最后将栈里的字符串弹出,并连接起来
  41. }
  42. return res;
  43. }
  44. public static void main(String[] args) {
  45. Scanner sc = new Scanner(System.in);
  46. while(sc.hasNext())
  47. {
  48. String s = sc.next();
  49. String res = decodeString(s);
  50. System.out.println(res);
  51. System.out.println();
  52. }
  53. }
  54. }

参考:

  1. 字符串解码
  2. 字符串解码(辅助栈法 / 递归法,清晰图解)
  3. 题解C++,栈
  4. C++ 递归/分治/双百
  5. 外层的先等等,把内层的解决了再和你连线
  6. 执行用时 : 0 ms , 在所有 C++ 提交中击败了 100.00% 的用户 内存消耗 : 8.8 MB , 在所有 C++ 提交中击败
  7. java 单栈解法逐行解释
  8. Java 辅助栈解法(有简单示意图)

发表评论

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

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

相关阅读

    相关 394. 字符串解码

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

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

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