实现思路
方法1: 栈 + Pairs法
1 使用 pairs<char, count> 来存入 st栈中
2 如果 st栈里 最后一个成员和 当前元素是相同的,说明是「相邻的重复元素」,此时需要处理是否出栈
3 最后需要注意,需要重复count次char,而不是直接删除掉count,因为count此时必然是 < k 且 合法的
参考文档
代码实现
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("");
}