5886. 如果相邻两个颜色均相同则删除当前颜色

总共有 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。

示例 1:输入:colors = "AAABABB"
输出:true
解释:
AAABABB -> AABABB
Alice 先操作。
她删除从左数第二个 'A' ,这也是唯一一个相邻颜色片段都是 'A' 的 'A' 。现在轮到 Bob 操作。
Bob 无法执行任何操作,因为没有相邻位置都是 'B' 的颜色片段 'B' 。
因此,Alice 获胜,返回 true 。
示例 2:输入:colors = "AA"
输出:false
解释:
Alice 先操作。
只有 2 个 'A' 且它们都在字符串的两端,所以她无法执行任何操作。
因此,Bob 获胜,返回 false 。
示例 3:输入:colors = "ABBBBBBBAAA"
输出:false
解释:
ABBBBBBBAAA -> ABBBBBBBAA
Alice 先操作。
她唯一的选择是删除从右数起第二个 'A' 。ABBBBBBBAA -> ABBBBBBAA
接下来轮到 Bob 操作。
他有许多选择,他可以选择任何一个 'B' 删除。然后轮到 Alice 操作,她无法删除任何片段。
所以 Bob 获胜,返回 false 。

解题思路

统计连续的A和连续的B,根据题意只有至少长度为3的连续字符才能进行删除字符,并且删除的个数为连续字符串长度减去首尾两个字符,统计Alice和Bob可删除的字符个数,可以删除字符多的获胜

代码

class Solution {public boolean winnerOfGame(String colors) {int pre = 0, cntA = 0, cntB=0,i = 0;while (i < colors.length()) {int s=i;while (i < colors.length() && colors.charAt(i) == 'A') {i++;}int len = i - s, end = i;if (len>=3) cntA+=len-2;while (i < colors.length() && colors.charAt(i) =='B' ) {i++;}int len2 = i - end;if (len2>=2) cntB+=len2-2;}return cntA==0?false:cntA>cntB;}
}

5886. 如果相邻两个颜色均相同则删除当前颜色相关推荐

  1. 力扣解法汇总2038- 如果相邻两个颜色均相同则删除当前颜色

    目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描 ...

  2. D21 LeetCode 2038.如果相邻两个颜色均相同则删除当前颜色(中等)

    一.题目 二.思路(自己) 值得注意的是,题目给出了一个条件不能从字符串两端删除颜色片段.从示例可以理解的是,跳过首个字符和末个字符,从中间开始进行计算. 按照一般的方法的话就是:搜索相同的连续字符串 ...

  3. Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。

    ***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中.谁先实现一行.一列或者一对角线上有4个相同颜色的棋子 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  4. 4、题目要求:读入N名学生的成绩,将获得某一给定分数的学生人数输出。 * * 输入格式:测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个

    题目: /* 4.题目要求:读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式:测试输入包含若干测试用例,每个测试用例的格式为   第1行:N   第2行:N名学生的成绩,相邻两数字用一 ...

  5. php设置背景为透明,css如何设置背景颜色透明?css设置背景颜色透明度的两种方法介绍...

    在网页布局中有时为了网页的整体美观,可能需要将网页中的某些部分设置为背景颜色透明,那么如何设置背景颜色透明呢?本篇文章就来给大家介绍一下css设置背景颜色透明的方法. 在css中设置背景颜色透明的方法 ...

  6. 在隧道内放置多个地感线圈,车辆通过时、对通过的相邻两个线圈的脉冲信号数据进行实时采集,首先利用云模型算法,计算得到车速的估计值

    1.简介与仿真结论 在隧道内放置多个地感线圈(间距相同),车辆通过时.对通过的相邻两个线圈(或单线圈)的脉冲信号数据进行实时采集,首先利用云模型算法(正向云与逆向云算法结合)或其他,计算得到车速的估计 ...

  7. 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值

    编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 目录 题目描述 代码实现 题目描述 序列重排:给一个长度为n的序列A,求找出 ...

  8. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。

    给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序. import java.util.Arrays;public class MaximumDif ...

  9. 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)

    题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且不能用非基于比较的排序 解法: 首先,输入的数组是还没有排好序的,题目要求是不能使用非基于比较的排序而且排序算法的时 ...

最新文章

  1. tf.keras.losses.SquaredHinge 损失函数 示例
  2. 全国志愿信息服务器,全国志愿者服务信息系统官网登录,2020全国志愿者服务信息系统官网登录注册入口预约 v1.0-手游汇...
  3. cgroup介绍、安装和控制cpu,内存,io示例
  4. 使用 DES 算法对数据加密
  5. CNN中的采样和池化心得
  6. Mysql存储引擎MyIsAM和InnoDB区别
  7. 更新ubuntu15.10内核后,驱动解决
  8. 团队作业_1_博客1(分工理解)
  9. 6 只能在公司代码xxxx的期间2020/08和2020/07中记账
  10. RabbitMQ实战经验分享
  11. SpringMVC自学日志04(Controller 及 RestFul风格 )
  12. python真是最烂的语言_在大型项目上,Python 是个烂语言吗?
  13. 没法再详细的说说Linux压缩与归档命令(下-2)
  14. java选填_java-选择填空题库
  15. 界面原型设计——在线教育app
  16. 没有投屏标志怎么投屏_没有TV投屏标示,手机电脑电视该如何实现投屏
  17. C语言小白(5)——结束语句
  18. torc中abs()和abs_()的区别
  19. 极点输入法如何关闭单过了模式
  20. 2018,青云QingCloud CEO黄允松关于云服务的预言会应验吗?

热门文章

  1. UVa272-TeX中的引号
  2. 多路转接select1
  3. 进程上下文与中断上下文的理解
  4. pthread_join函数
  5. mmap和munmap对文件进行操作(读写等)
  6. 全套学习!mysql命令窗口执行sql文件
  7. 小程序 setData 中的坑,其实好像...
  8. PCH文件的创建和配置
  9. .NET 类型(Types)的那些事
  10. 升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏