leetcode 394字符串解码

拼搏现实的明天。 2023-06-11 15:29 54阅读 0赞

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

编码规则为: 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”.

学到了:
String rer = “”;
rer = stack.pop()+rer;

判断字符到数字范围
s.charAt(0)>‘0’&&s.charAt(0)<‘9’
解题思路:就是遇到数字字符都压入栈中。碰到”]“符号,就弹栈直到找到“[”
并将之前的数字也找到。技巧就是上面2个小技巧。

  1. class Solution {
  2. public static String decodeString(String s) {
  3. StringBuilder sbs = new StringBuilder();
  4. Stack<String> stack = new Stack<>();
  5. for(int i = 0;i<s.length();i++)
  6. {
  7. char c = s.charAt(i);
  8. if(c!=']')
  9. {
  10. String sq = "";
  11. stack.push(sq+c);
  12. }else{
  13. //学到的东西
  14. String o = "";
  15. while(!stack.peek().equals("[")){
  16. o = stack.pop()+o;
  17. }
  18. stack.pop();
  19. String count = "";
  20. while(!stack.isEmpty()&&stack.peek().charAt(0)>='0'&&stack.peek().charAt(0)<='9')
  21. {
  22. count = stack.pop()+count;
  23. }
  24. int countNum = Integer.parseInt(count);
  25. String ret = "";
  26. for(int j = 0;j<countNum;j++)
  27. {
  28. ret = ret+o;
  29. }
  30. stack.push(ret);
  31. }
  32. }
  33. String op = "";
  34. while(!stack.isEmpty())
  35. {
  36. op= stack.pop()+op;
  37. }
  38. return op;
  39. }
  40. }

发表评论

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

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

相关阅读

    相关 394. 字符串解码

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

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

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