lgwebdream / FE-Interview

🔥🔥🔥 前端面试,独有前端面试题详解,前端面试刷题必备,1000+前端面试真题,Html、Css、JavaScript、Vue、React、Node、TypeScript、Webpack、算法、网络与安全、浏览器

Home Page:https://lgwebdream.github.io/FE-Interview/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Day205:这里有个约定规则,实现一个方法 decodeStr,输入一个字符串,根据约定规则输出编码结果。约定规则如下:

Genzhen opened this issue · comments

//str = "2[a]1[bc]", 返回 "aabc".
// str = "2[e2[d]]", 返回 "eddedd".
// str = "3[abc]2[cd]ff", 返回 "abcabcabccdcdff".
// 可以看出: N[string],表示string 正好重复 N 次。假设字符串一定是有效正确的字符串;但是你需要考虑其他可能出现的入参错误场景。

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。


参考代码实现

  • 实现方式一
var decodeStr = function (str) {
  if (typeof str !== "string") {
    throw "请输入字符串";
  }
  var index = 0,
    decodeQueue = [];
  while (index < str.length) {
    var eleStr = str[index];
    if (eleStr === "[") {
      decodeQueue.push(index);
    }
    if (decodeQueue.length > 0 && eleStr === "]") {
      var leftIndex = decodeQueue.pop();
      var rightIndex = index;
      str = strFormat(str, leftIndex, rightIndex);
      index = 0;
      continue;
    }
    index++;
  }
  return str;
};
var strFormat = function (str, startIndex, rightIndex) {
  // 辅助函数: 将形如str[]对应左右index展开;
  var temp = str.substring(startIndex + 1, rightIndex);
  var copiedStr = "";
  var copyNum = "";
  while (str[--startIndex] >= 0) {
    copyNum = str[startIndex] + copyNum;
  }
  for (var i = 0; i < copyNum; i++) {
    copiedStr += temp;
  }
  str =
    str.substring(0, startIndex + 1) +
    copiedStr +
    str.substring(rightIndex + 1);
  return str;
};
  • 实现方式二
function decodeStr(str) {
  if (typeof str !== "string") {
    throw "请输入字符串";
  }
  while (str.indexOf("[") > 0) {
    str = str.replace(/(\d+)\[(\w+)\]/g, (match, num, str) => str.repeat(num));
  }
  return str;
}
function generateStr(str) {
  const reg = /(\d+)\[(\w+)\]/g;
  let res = str;
  while(reg.test(res)){
    res = res.replace(reg, (...params) => {
      return params[2].repeat(Number(params[1]));
    })
  }
  return res;
};
generateStr("2[a]1[bc]");