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;}
}