Q29- code1209- 删除字符串中的所有相邻重复项 II

0 阅读1分钟

实现思路

方法1: 栈 + Pairs法

1 使用 pairs<char, count> 来存入 st栈中

2 如果 st栈里 最后一个成员和 当前元素是相同的,说明是「相邻的重复元素」,此时需要处理是否出栈

3 最后需要注意,需要重复count次char,而不是直接删除掉count,因为count此时必然是 < k 且 合法的

参考文档

01-直接参考实现

代码实现

1 方法1: 栈 + Pairs法 时间复杂度: O(n); 空间复杂度(n)

function removeDuplicates(s: string, k: number): string {
   // [char, count]
  const st: [string, number][] = [];
  for (let char of s) {
    if (!st.length || st.at(-1)[0] !== char) {
      st.push([char, 1]);
    } else {
      st.at(-1)[1] = st.at(-1)[1] + 1;
      if (st.at(-1)[1] === k) st.pop();
    }
  }

  // 易错点1:需要 将栈中的元素转换回字符串,每个字符重复其计数次数
  return st.map(([char, count]) => char.repeat(count)).join("");
}