1D Candy Crush如何删除大于 3 的连续相同序列?

问题描述

编辑:已更新我的解决方

提示:编写一个函数来在一维板上粉碎糖果。在糖果粉碎游戏中,从棋盘上移除一组相似的物品。在这个问题中,任何包含 3 个或更多相似项的序列都应该被移除,并且任何与该序列相邻的项现在都应该被视为彼此相邻。

输入:“aaaabbbc”

输出:"c"

说明:

  1. 删除 3 'a': "aaaabbbbc" => "bbbbc"
  2. 删除 4 'b': "bbbbc" => "c"

目前的解决方案:

const crush = (s) => {
    let stack = [];
    let res = '';

    for (let i = 0; i < s.length; i++) {
        let top = stack[stack.length - 1];
        
        if (stack.length && s[i] !== top[0] && top[1] >= 3) { 
            stack.pop();
            top = stack[stack.length - 1]; 
        } 
        
        if (stack.length && s[i] === top[0]) { 
            top[1]++;
            if (top[1] >= 3 && (i === s.length - 1)) stack.pop();
        }
        
        else stack.push([s[i],1]);
    }
    for (let cur of stack) res += cur[0].repeat(cur[1])

    return res;
}

有人可以建议我需要做什么来删除长度超过 3 的连续字母块吗?

我基本上已经解决了这个问题,但是如果我在函数中输入 'aaaab',它会返回 'ab'....

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)