题目
方法:贪心
分析题意可知:
- 当
colors
中有一串连续的长度为 L A L_\text{A} LA 的A
时,Alice 可以删除中间的 L A − 2 L_\text{A}-2 LA−2 个A
,而不能删除两边的2
个A
- 当
colors
中有一串连续的长度为 L B L_\text{B} LB 的B
时,Bob 可以删除中间的 L B − 2 L_\text{B}-2 LB−2 个B
,而不能删除两边的2
个B
- 两者的删除操作互不影响
- 因此,可以分别计算出 Alice 和 Bob 的操作数:
- 当 Alice 的操作数大于 Bob 的操作数时,Alice 获胜
- 否则,Bob 获胜
class Solution {
public boolean winnerOfGame(String colors) {
int[] freq = {0, 0};
char cur = 'C';
int cnt = 0;
for (int i = 0; i < colors.length(); i++) {
char c = colors.charAt(i);
if (c != cur) {
cur = c;
cnt = 1;
} else {
cnt += 1;
if (cnt >= 3) {
freq[cur - 'A'] += 1;
}
}
}
return freq[0] > freq[1];
}
}
- 时间复杂度:
O
(
n
)
O(n)
O(n),其中
n
n
n 是
colors
的长度 - 空间复杂度: O ( 1 ) O(1) O(1)。仅需要常数空间
同类型加餐:https://leetcode-cn.com/problems/remove-colored-pieces-if-both-neighbors-are-the-same-color/solution/gong-shui-san-xie-nao-jin-ji-zhuan-wan-y-a8xm/