避免用string.replace替换以前的字母

zour9fqk  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(279)

我正在做一个codewars kata,根据字母的重复将单词编码为开括号或闭括号。这里是链接。
我的代码除了一个测试外,其他所有测试都可以使用,当单词等于“(()”)。
我想我发现在最后一个“)”,第一个“(”正在被更改为“)”,因为replace的匹配,改变了预期的输出。有什么方法可以防止对我的输出进行这种不必要的更改吗?

const duplicateEncode = (word) => {
  let words = word.toLowerCase();
  let obj = {};
  for (let i of words) {
    obj[i] = obj[i] ? obj[i] + 1 : 1;
  }
  for (let i of words) {
    obj[i] === 1
      ? (words = words.replace(i, "("))
      : (words = words.replace(i, ")"));
  }
  return words;
};

预期产量

duplicateEncode(" ( ( )")); // )))))(

我的输出

duplicateEncode(" ( ( )")); // ()))))
gpnt7bae

gpnt7bae1#

不要在整个单词中使用string.replace,您应该直接修改每个字符,或者最好只构造一个新字符串返回。

const duplicateEncode = (word) => {
  let words = word.toLowerCase();
  let obj = {};
  for (let i of words) {
    obj[i] = obj[i] ? obj[i] + 1 : 1;
  }
  let out = "";
  for (let i of words) {
    out += obj[i] === 1 ? "(" : ")";
  }
  return out;
};

console.log(duplicateEncode(" ( ( )"));
// )))))(

相关问题