题目描述
总共有n
个颜色片段排成一列,每个颜色片段要么是 'A'
要么是'B'
。给你一个长度为 n
的字符串 colors
,其中 colors[i] 表示第 i 个颜色片段的颜色。
Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。
如果一个颜色片段为 'A' 且 相邻两个颜色 都是颜色 'A' ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 'B' 片段。
如果一个颜色片段为 'B' 且 相邻两个颜色 都是颜色 'B' ,那么 Bob 可以删除该颜色片段。Bob 不可以 删除任何颜色 'A' 片段。
Alice 和 Bob 不能 从字符串两端删除颜色片段。
如果其中一人无法继续操作,则该玩家 输 掉游戏且另一玩家 获胜 。
假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回 true,否则 Bob 获胜,返回 false。
示例
输入:colors = "AAABABB"
输出:true
解释:
AAABABB -> AABABB
Alice 先操作。
她删除从左数第二个 'A' ,这也是唯一一个相邻颜色片段都是 'A' 的 'A' 。
现在轮到 Bob 操作。
Bob 无法执行任何操作,因为没有相邻位置都是 'B' 的颜色片段 'B' 。
因此,Alice 获胜,返回 true 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-colored-pieces-if-both-neighbors-are-the-same-color
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
由于Alice和Bob会采用最优策略,所以可以忽略每次删除那个片段,直接计算可删除次数,比较大小即可
使用一个循环,遍历整个字符串,统计A和B的连续片段数,大的获胜
class Solution {
public boolean winnerOfGame(String colors) {
if (colors.length() < 3) return false;
int aCount = 0;
int bCount = 0;
for (int i = 1; i < colors.length()-1 ; i++) {
if (colors.charAt(i) == 'A' && colors.charAt(i-1) == 'A' && colors.charAt(i+1) == 'A') aCount++;
if (colors.charAt(i) == 'B' && colors.charAt(i-1) == 'B' && colors.charAt(i+1) == 'B') bCount++;
}
return aCount > bCount;
}
}
题目来自力扣