其他分享
首页 > 其他分享> > 每日一题-Day37-删除颜色片段

每日一题-Day37-删除颜色片段

作者:互联网

题目描述

总共有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;
    }
}

题目来自力扣

标签:片段,颜色,删除,Day37,Alice,colors,一题,Bob
来源: https://www.cnblogs.com/cwtjyy/p/15835014.html