当前位置:首页 > JavaScript

js实现decodeString

2026-01-31 23:18:33JavaScript

解码字符串的实现方法

在JavaScript中实现decodeString功能,通常指解码类似3[a]2[bc]这样的编码字符串,结果为aaabcbc。以下是几种实现方式:

使用栈结构处理嵌套

这种方法利用栈处理嵌套的编码字符串,适用于多层嵌套的情况。

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 === ']') {
      const num = stack.pop();
      const prevStr = stack.pop();
      currentStr = prevStr + currentStr.repeat(num);
    } else if (!isNaN(char)) {
      currentNum = currentNum * 10 + parseInt(char);
    } else {
      currentStr += char;
    }
  }
  return currentStr;
}

示例调用

js实现decodeString

console.log(decodeString("3[a]2[bc]")); // 输出 "aaabcbc"

递归解法

对于嵌套层级较深的情况,递归方法可以更直观地处理。

function decodeString(s, index = [0]) {
  let result = '';
  while (index[0] < s.length && s[index[0]] !== ']') {
    if (isNaN(s[index[0]])) {
      result += s[index[0]++];
    } else {
      let num = 0;
      while (!isNaN(s[index[0]])) {
        num = num * 10 + parseInt(s[index[0]++]);
      }
      index[0]++; // 跳过 '['
      const innerStr = decodeString(s, index);
      index[0]++; // 跳过 ']'
      result += innerStr.repeat(num);
    }
  }
  return result;
}

示例调用

js实现decodeString

console.log(decodeString("3[a2[c]]")); // 输出 "accaccacc"

正则表达式替换

通过正则表达式逐步替换编码部分,适合简单场景。

function decodeString(s) {
  const regex = /(\d+)\[([a-z]*)\]/g;
  while (s.includes('[')) {
    s = s.replace(regex, (_, num, str) => str.repeat(num));
  }
  return s;
}

注意事项

  • 此方法对多层嵌套的支持有限,可能需要多次替换。

性能与复杂度分析

  • 栈方法:时间复杂度为O(n),空间复杂度为O(n),适合大多数场景。
  • 递归方法:可能面临调用栈过深的问题,但代码更简洁。
  • 正则方法:适合简单模式,多次替换可能影响性能。

根据实际需求选择合适的方法,栈方法通常是通用且高效的选择。

标签: jsdecodeString
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…