function decodeString(s)
{
let arr = [];
let digitSum = '';
let digitSumArr = []; // for numbers before '['
let i;
//iterating string
for (i = 0; i < s.length; i++)
{
if (!isNaN(s[i]))
{
digitSum += s[i]; // count number before '['
}
else if (s[i] === '[')
{
// add number to the array
digitSumArr.push(+digitSum);
arr.push(i + 1);
digitSum = '';
}
else if (s[i] === ']')
{
let digit = digitSumArr.pop();
i = decStr(arr, i, digit);
digitSum = '';
}
else
{
digitSum = '';
}
}
return s;
function decStr(arr, j, number)
{
let arrLen = arr.length;
let n = number;
let str = s.slice(arr[arrLen - 1], j);
let sumStr = str;
while (n-- > 1)
{
sumStr = sumStr.concat(str);
}
str = number + '[' + str + ']';
s = s.replace(str, sumStr);
arr.splice(arrLen - 1, 1);
//return position for iterating
return j + sumStr.length - str.length - 1;
}
}
给出一个编码字符串,返回其对应的解码字符串。 编码规则是:k [encoded_string],其中方括号内的encode_string精确重复k次。 注意:k保证是正整数。
请注意,您的解决方案应具有线性复杂度,因为这是在面试中会问到的问题。
答案 0 :(得分:0)
问题在于,在给定解决方案的情况下,失败的测试具有足够的复杂度输入,需要比分配的限制花费更多的时间来解决。因此,您需要找到一个更有效的解决方案。
我在您的解决方案和另一个使用递归过程调用的解决方案上运行了性能基准测试,您的速度慢了33%。建议您重构解决方案,以在遇到嵌套迭代时递归调用解析过程。