提示:
给定一个编码字符串,返回其对应的解码字符串。编码规则是: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]")
)