你正在参与祖玛游戏的一个变种。
在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'、黄色 'Y'、蓝色 'B'、绿色 'G' 或白色 'W' 。你的手中也有一些彩球。
你的目标是 清空 桌面上所有的球。每一回合:
从你手上的彩球中选出 任意一颗 ,然后将其插入桌面上那一排球中:两球之间或这一排球的任一端。
接着,如果有出现 三个或者三个以上 且 颜色相同 的球相连的话,就把它们移除掉。
如果这种移除操作同样导致出现三个或者三个以上且颜色相同的球相连,则可以继续移除这些球,直到不再满足移除条件。
如果桌面上所有球都被移除,则认为你赢得本场游戏。
重复这个过程,直到你赢了游戏或者手中没有更多的球。
给你一个字符串 board ,表示桌面上最开始的那排球。另给你一个字符串 hand ,表示手里的彩球。请你按上述操作步骤移除掉桌上所有球,计算并返回所需的 最少 球数。如果不能移除桌上所有的球,返回 -1 。
示例 1:
输入:board = "WRRBBW", hand = "RB"
输出:-1
解释:无法移除桌面上的所有球。可以得到的最好局面是:
- 插入一个 'R' ,使桌面变为 WRRRBBW 。WRRRBBW -> WBBW
- 插入一个 'B' ,使桌面变为 WBBBW 。WBBBW -> WW
桌面上还剩着球,没有其他球可以插入。
解题思路:
使用 visited_ball 维护遍历过的每种球的颜色和连续数量,设其中最后一个颜色 last_color,其连续数量为 last_num;遍历桌面上的球,设当前遍历到的球为cur_ball,其颜色为 cur_color。
首先,判断:
如果visited_ball 不为空,且 cur_color 与last_color 不同,则判断:如果 last_num 大于等于 3,则从 visited_ball 中移除last_color 和 last_num。
接着,判断:
如果visited_ball 为空,或 cur_color 与last_color 不同,则向visited_ball 添加 cur_color 及连续数量 1;
否则,累加last_num。
最后,根据列表中维护的每种球的颜色和连续数量,重新构造桌面上的球的组合即可