2038:如果相邻两个颜色均相同则删除当前颜色
This commit is contained in:
parent
0bb2b89a67
commit
739f7a534d
@ -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)
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
<p>总共有 <code>n</code> 个颜色片段排成一列,每个颜色片段要么是 <code>'A'</code> 要么是 <code>'B'</code> 。给你一个长度为 <code>n</code> 的字符串 <code>colors</code> ,其中 <code>colors[i]</code> 表示第 <code>i</code> 个颜色片段的颜色。</p>
|
||||
|
||||
<p>Alice 和 Bob 在玩一个游戏,他们 <strong>轮流</strong> 从这个字符串中删除颜色。Alice <strong>先手</strong> 。</p>
|
||||
|
||||
<ul>
|
||||
<li>如果一个颜色片段为 <code>'A'</code> 且 <strong>相邻两个颜色</strong> 都是颜色 <code>'A'</code> ,那么 Alice 可以删除该颜色片段。Alice <strong>不可以</strong> 删除任何颜色 <code>'B'</code> 片段。</li>
|
||||
<li>如果一个颜色片段为 <code>'B'</code> 且 <strong>相邻两个颜色</strong> 都是颜色 <code>'B'</code> ,那么 Bob 可以删除该颜色片段。Bob <strong>不可以</strong> 删除任何颜色 <code>'A'</code> 片段。</li>
|
||||
<li>Alice 和 Bob <strong>不能</strong> 从字符串两端删除颜色片段。</li>
|
||||
<li>如果其中一人无法继续操作,则该玩家 <b>输</b> 掉游戏且另一玩家 <strong>获胜</strong> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>假设 Alice 和 Bob 都采用最优策略,如果 Alice 获胜,请返回 <code>true</code>,否则 Bob 获胜,返回<em> </em><code>false</code>。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>colors = "AAABABB"
|
||||
<b>输出:</b>true
|
||||
<b>解释:</b>
|
||||
A<em><strong>A</strong></em>ABABB -> 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 -> ABBBBBBBAA
|
||||
Alice 先操作。
|
||||
她唯一的选择是删除从右数起第二个 'A' 。
|
||||
|
||||
ABBBB<strong><em>B</em></strong>BBAA -> ABBBBBBAA
|
||||
接下来轮到 Bob 操作。
|
||||
他有许多选择,他可以选择任何一个 'B' 删除。
|
||||
|
||||
然后轮到 Alice 操作,她无法删除任何片段。
|
||||
所以 Bob 获胜,返回 false 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= colors.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>colors</code> 只包含字母 <code>'A'</code> 和 <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>
|
Loading…
Reference in New Issue
Block a user