Javascript 解码字符串代码战斗:程序不';我不能通过所有测试。”;测试时超过30/31输出限制-31“;。衷心支持 函数解码字符串 { 设arr=[]; 让digitSum=''; 让digitSumArr=[];//表示“[”之前的数字 让我; //迭代字符串 对于(i=0;i1) { sumStr=sumStr.concat(str); } str=number+'['+str+']'; s=s.replace(str,sumStr); arr.拼接(arrLen-1,1); //迭代返回位置 返回j+sumStr.length-str.length-1; } }
给定一个编码字符串,返回其对应的解码字符串。 编码规则为:k[encoded_string],其中方括号内的编码_string精确重复k次。 注:k保证为正整数Javascript 解码字符串代码战斗:程序不';我不能通过所有测试。”;测试时超过30/31输出限制-31“;。衷心支持 函数解码字符串 { 设arr=[]; 让digitSum=''; 让digitSumArr=[];//表示“[”之前的数字 让我; //迭代字符串 对于(i=0;i1) { sumStr=sumStr.concat(str); } str=number+'['+str+']'; s=s.replace(str,sumStr); arr.拼接(arrLen-1,1); //迭代返回位置 返回j+sumStr.length-str.length-1; } },javascript,decode,string-decoding,Javascript,Decode,String Decoding,给定一个编码字符串,返回其对应的解码字符串。 编码规则为:k[encoded_string],其中方括号内的编码_string精确重复k次。 注:k保证为正整数 请注意,您的解决方案应该具有线性复杂度,因为这是面试时会问您的问题。问题是,失败测试的输入具有足够的复杂度,需要比给定解决方案分配的限制更多的时间来解决。因此,您需要找到更有效的解决方案 我在您的解决方案和另一个使用递归过程调用的解决方案上运行了性能基准测试,您的解决方案慢了33%。我建议您重构您的解决方案,以便在遇到嵌套迭代时递归调用
请注意,您的解决方案应该具有线性复杂度,因为这是面试时会问您的问题。问题是,失败测试的输入具有足够的复杂度,需要比给定解决方案分配的限制更多的时间来解决。因此,您需要找到更有效的解决方案
我在您的解决方案和另一个使用递归过程调用的解决方案上运行了性能基准测试,您的解决方案慢了33%。我建议您重构您的解决方案,以便在遇到嵌套迭代时递归调用解析过程。您调用的
decodeString
是什么导致了您想要纠正的错误x?decodeString()是一个获取字符串并返回已解码字符串的函数。例如:对于s=“4[ab]”,输出应为decodeString=“abababab”;对于s=“2[b3[a]]”,输出应为decodeString=“baabaaa”;对于s=“z1[y]zzz2[abc]”,输出应为decodeString=“zyzzababc”。
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;
}
}