题目
请编写一个字符串解码函数 unzip(str),可以把压缩后的字符串展开。比如:
- 输入字符串
2[a]3[b],返回aabbb - 输入字符串
2[ac2[b]],返回acbbacbb
解题
从输入输出,可以看出规律:阿拉伯数字表示重复次数,方括号表示重复字符串;另外,方括号可以嵌套。
如果暂不考虑嵌套,那么可以使用正则表达式,结合字符串替换实现基本功能:
function unzip(str) {
const reg = /(\d+)\[(\w+)\]/g;
return str.replace(reg, (_, a, b) => {
return new Array(+a).fill(b).join('');
});
}
console.log(unzip('2[a]3[b]'));
// => aabbb
console.log(unzip('2[a3[b]]'));
// => 2[abbb]
嵌套解码可以在上述基础上,使用循环从里到外重复解码实现:
function unzip(str) {
const reg = /(\d+)\[(\w+)\]/g;
let result = str;
while (reg.test(result)) {
result = result.replace(reg, (_, a, b) => {
return new Array(+a).fill(b).join('');
});
}
return result;
}
console.log(unzip('2[a3[b]]'));
// => abbbabbb