【发布时间】:2018-11-21 00:36:15
【问题描述】:
提示: 给定一个编码字符串,返回其对应的解码字符串。编码规则是:k[encoded_string],其中方括号内的encoded_string恰好重复k次。注意:k 保证为正整数。
对于 s = "4[ab]",输出应该是 decodeString(s) = "abababab" 对于 s = "2[b3[a]]",输出应该是 decodeString(s) = "baaabaaa"
我的回答:
let decodeString = function(s) {
const replaced = s.replace((/(\d+)\[([a-z]*)\]/), (match, num, substr) => {
return substr.repeat(num);
})
return replaced.indexOf('[') > -1 ? decodeString(replaced) : replaced;
};
此解决方案适用于较小的输入,如 "3[a]2[bc]",但对于更复杂的输入,如 "3[a]2[b4[F]c]",我会出现堆栈溢出。有没有办法迭代地执行此操作以避免使用调用堆栈?是否可以仅通过使用正则表达式来解决这个问题?非常感谢任何帮助!
【问题讨论】:
-
使用递归函数和你的正则表达式是可能的
-
这是编写基本词法分析器、解析器和求值器的绝佳练习。我强烈建议您尝试一下。它将向您展示如何在没有高度复杂的正则表达式引擎的情况下解决此问题。
标签: javascript regex string recursion decode