2038:如果相邻两个颜色均相同则删除当前颜色

This commit is contained in:
轩辕龙儿 2022-03-22 20:40:39 +08:00
parent 0bb2b89a67
commit 739f7a534d
2 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,96 @@
//总共有 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
//
//
//
//
// 提示
//
//
// 1 <= colors.length <= 10
// colors 只包含字母 'A' 'B'
//
// Related Topics 贪心 数学 字符串 博弈 👍 50 👎 0
package leetcode.editor.cn;
//2038:如果相邻两个颜色均相同则删除当前颜色
public class RemoveColoredPiecesIfBothNeighborsAreTheSameColor {
public static void main(String[] args) {
Solution solution = new RemoveColoredPiecesIfBothNeighborsAreTheSameColor().new Solution();
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean winnerOfGame(String colors) {
int length = colors.length();
while (colors.contains("AAA")) {
colors = colors.replace("AAA", "AA");
}
int a = length - colors.length();
length = colors.length();
while (colors.contains("BBB")) {
colors = colors.replace("BBB", "BB");
}
int b = length - colors.length();
return a > b;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,65 @@
<p>总共有 <code>n</code>&nbsp;个颜色片段排成一列,每个颜色片段要么是&nbsp;<code>'A'</code>&nbsp;要么是&nbsp;<code>'B'</code>&nbsp;。给你一个长度为&nbsp;<code>n</code>&nbsp;的字符串&nbsp;<code>colors</code>&nbsp;,其中&nbsp;<code>colors[i]</code>&nbsp;表示第&nbsp;<code>i</code>&nbsp;个颜色片段的颜色。</p>
<p>Alice 和 Bob 在玩一个游戏,他们 <strong>轮流</strong>&nbsp;从这个字符串中删除颜色。Alice <strong>先手</strong>&nbsp;</p>
<ul>
<li>如果一个颜色片段为 <code>'A'</code>&nbsp;<strong>相邻两个颜色</strong>&nbsp;都是颜色 <code>'A'</code>&nbsp;,那么 Alice 可以删除该颜色片段。Alice&nbsp;<strong>不可以</strong>&nbsp;删除任何颜色&nbsp;<code>'B'</code>&nbsp;片段。</li>
<li>如果一个颜色片段为 <code>'B'</code>&nbsp;<strong>相邻两个颜色</strong>&nbsp;都是颜色 <code>'B'</code>&nbsp;,那么 Bob 可以删除该颜色片段。Bob <strong>不可以</strong>&nbsp;删除任何颜色 <code>'A'</code>&nbsp;片段。</li>
<li>Alice 和 Bob <strong>不能</strong>&nbsp;从字符串两端删除颜色片段。</li>
<li>如果其中一人无法继续操作,则该玩家 <b></b>&nbsp;掉游戏且另一玩家 <strong>获胜</strong>&nbsp;</li>
</ul>
<p>假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回&nbsp;<code>true</code>,否则 Bob 获胜,返回<em>&nbsp;</em><code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>colors = "AAABABB"
<b>输出:</b>true
<b>解释:</b>
A<em><strong>A</strong></em>ABABB -&gt; AABABB
Alice 先操作。
她删除从左数第二个 'A' ,这也是唯一一个相邻颜色片段都是 'A' 的 'A' 。
现在轮到 Bob 操作。
Bob 无法执行任何操作,因为没有相邻位置都是 'B' 的颜色片段 'B' 。
因此Alice 获胜,返回 true 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>colors = "AA"
<b>输出:</b>false
<strong>解释:</strong>
Alice 先操作。
只有 2 个 'A' 且它们都在字符串的两端,所以她无法执行任何操作。
因此Bob 获胜,返回 false 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>colors = "ABBBBBBBAAA"
<b>输出:</b>false
<strong>解释:</strong>
ABBBBBBBA<em><strong>A</strong></em>A -&gt; ABBBBBBBAA
Alice 先操作。
她唯一的选择是删除从右数起第二个 'A' 。
ABBBB<strong><em>B</em></strong>BBAA -&gt; ABBBBBBAA
接下来轮到 Bob 操作。
他有许多选择,他可以选择任何一个 'B' 删除。
然后轮到 Alice 操作,她无法删除任何片段。
所以 Bob 获胜,返回 false 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;=&nbsp;colors.length &lt;= 10<sup>5</sup></code></li>
<li><code>colors</code>&nbsp;只包含字母&nbsp;<code>'A'</code>&nbsp;&nbsp;<code>'B'</code></li>
</ul>
<div><div>Related Topics</div><div><li>贪心</li><li>数学</li><li>字符串</li><li>博弈</li></div></div><br><div><li>👍 50</li><li>👎 0</li></div>