5886. 如果相邻两个颜色均相同则删除当前颜色
生活随笔
收集整理的這篇文章主要介紹了
5886. 如果相邻两个颜色均相同则删除当前颜色
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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. 如果相邻两个颜色均相同则删除当前颜色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到老鼠什么预兆
- 下一篇: 5885. 使每位学生都有座位的最少移动