decodeString codefights:程序未通过所有测试。“30/31 测试 -31 超出输出限制”。请支持

decodeString codefights: Program doesn't pass all tests."30/31 Output limit exceeded on test -31". Kindly support

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; 
      }
}

给定一个编码字符串,return它对应的解码字符串。 编码规则为:k[encoded_string],其中方括号内的encoded_string正好重复k次。 注:k保证为正整数。

请注意,您的解决方案应该具有线性复杂度,因为这是您在面试中会被问到的问题。

问题是失败的测试具有足够复杂的输入,需要比给定的解决方案分配的限制更多的时间来解决。因此,您需要找到更有效的解决方案。

我 运行 对您的解决方案和另一个使用递归过程调用的解决方案进行了性能基准测试,而您的速度慢了 33%。我建议您重构您的解决方案,以便在遇到嵌套迭代时递归调用解析过程。