题目

image.png

思路

  • 有限状态机

代码

  1. class Solution {
  2. public String decodeString(String s) {
  3. char[] chars = s.toCharArray();
  4. int len = chars.length;
  5. Stack<String> strs = new Stack<>();
  6. Stack<Integer> nums = new Stack<>();
  7. int num = 0;
  8. String str = "";
  9. for (int i = 0; i < len; i++) {
  10. //计算数字
  11. if (chars[i] >= '0' && chars[i] <= '9') {
  12. num = num * 10 + (chars[i] - '0');
  13. //对左括号入栈
  14. } else if (chars[i] == '[') {
  15. nums.push(num);
  16. strs.push(str);
  17. num = 0;
  18. str = "";
  19. //对右括号入栈
  20. } else if (chars[i] == ']') {
  21. StringBuilder temp = new StringBuilder(str);
  22. int size = nums.pop();
  23. for (int j = 1; j < size; j++) {
  24. temp.append(str);
  25. }
  26. str = strs.pop() + temp.toString();
  27. //对字符串相加即可
  28. } else {
  29. str += chars[i];
  30. }
  31. }
  32. return str;
  33. }
  34. }

字符串解码