提示:
给定一个编码字符串,返回其对应的解码字符串。编码规则是:k [encoded_string],其中方括号内的encode_string精确重复k次。注意:k保证为正整数。

对于s =“ 4 [ab]”,输出应为decodeString(s)=“ abababab”
对于s =“ 2 [b3 [a]]”,输出应为encodeString(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]"这样更复杂的输入,则会出现堆栈溢出。有没有一种方法可以反复执行此操作以避免使用调用堆栈?仅使用正则表达式就能解决这个问题吗?任何帮助深表感谢!

最佳答案

function decodeString(str){
	let regex = /(\d+)\[([a-z]*)\]/gi;
	let result = str.replace(regex, (match, num, substr) => substr.repeat(num));
	let recall = regex.test(result);
	if(recall){
		return decodeString(result);
	}
	return result;
}

console.log(
  decodeString("4[ab]"),
  decodeString("2[b3[a]]"),
  decodeString("3[a]2[b4[F]c]")
)

10-08 01:22