js实现decodeString
实现 decodeString 的方法
使用递归方法解析嵌套的编码字符串。递归可以处理多层嵌套的情况,通过识别数字和括号来递归解码内部字符串。
function decodeString(s) {
const stack = [];
let currentNum = 0;
let currentStr = '';
for (let char of s) {
if (char === '[') {
stack.push(currentStr);
stack.push(currentNum);
currentStr = '';
currentNum = 0;
} else if (char === ']') {
let num = stack.pop();
let prevStr = stack.pop();
currentStr = prevStr + currentStr.repeat(num);
} else if (/\d/.test(char)) {
currentNum = currentNum * 10 + parseInt(char);
} else {
currentStr += char;
}
}
return currentStr;
}
使用正则表达式匹配和替换
通过正则表达式匹配编码模式,利用替换函数动态生成解码后的字符串。这种方法简洁但可能不适合非常复杂的嵌套情况。
function decodeString(s) {
const regex = /(\d+)\[([^\[\]]+)\]/g;
const replacer = (match, num, str) => str.repeat(num);
let result = s;
while (result.includes('[')) {
result = result.replace(regex, replacer);
}
return result;
}
处理多层嵌套的优化方法
结合栈和循环处理多层嵌套,确保每次都能正确解析最内层的编码字符串,逐步向外扩展。

function decodeString(s) {
const stack = [];
let res = '';
let num = 0;
for (let char of s) {
if (char === '[') {
stack.push(res);
stack.push(num);
res = '';
num = 0;
} else if (char === ']') {
let count = stack.pop();
let prevStr = stack.pop();
res = prevStr + res.repeat(count);
} else if (char >= '0' && char <= '9') {
num = num * 10 + parseInt(char);
} else {
res += char;
}
}
return res;
}
注意事项
- 确保输入字符串格式正确,避免未闭合的括号或非法字符。
- 对于极深的嵌套,递归方法可能会导致栈溢出,可以考虑使用迭代方法优化。
- 测试用例应覆盖单层、多层嵌套以及混合字符的情况。






