【每日刷题】字符串解码
2026/7/23 8:55:39 网站建设 项目流程

394. 字符串解码 - 力扣(LeetCode)

自己用了递归解法,题解就只写这一种吧。全局变量pos来记录当前位置,直到处理完所有字符。

  • 如果当前字符是数字,就计算 num;
  • 如果当前字符是字母就直接拼接;
  • 如果遇到“ [ ”,说明接下来要拼接子串,直接调用decode求出子串;
  • 如果遇到“ ] ”,直接跳出当前循环,说明当前字符串已经拼接完成了,直接返回。

需要注意的一点是pos要在取完ch就进行pos++,如果放在循环结尾,那么每次调用decode进去都是“ [ ”,会一直新建子串,导致错误。

StringBuilder 的拼接性能比 String 要好,因此只在最外层的 decodeString 里转换为 String 并返回,其余所有地方都用的 StringBuilder。

class Solution { int pos = 0; public String decodeString(String s) { return decode(s).toString(); } public StringBuilder decode(String s) { StringBuilder res = new StringBuilder(); int num = 0; while(pos < s.length()) { char ch = s.charAt(pos); pos++; if(ch >= '0' && ch <= '9') { num = num * 10 + ch - '0'; } else if(ch >= 'a' && ch <= 'z') { res.append(ch); } else if(ch == '[') { StringBuilder sub = decode(s); for(int i = 0; i < num; i++) { res.append(sub); } num = 0; } else { break; } } return res; } }

至于官解,太长了看得头大,懒得贴了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询