【从零开始的LeetCode-算法】3227. 字符串元音游戏

小红和小明在玩一个字符串元音游戏。

给你一个字符串 s,小红和小明将轮流参与游戏,小红开始:

  • 在小红的回合,她必须移除 s 中包含 奇数 个元音的任意 非空

    子字符串。

  • 在小明的回合,他必须移除 s 中包含 偶数 个元音的任意 非空

    子字符串。

第一个无法在其回合内进行移除操作的玩家输掉游戏。假设小红和小明都采取 最优策略

如果小红赢得游戏,返回 true,否则返回 false

英文元音字母包括:a, e, i, o, 和 u

示例 1:

输入: s = "leetcoder"

输出: true

解释:

小红可以执行如下移除操作来赢得游戏:

  • 小红先手,她可以移除加下划线的子字符串 s = "++leetco++der",其中包含 3 个元音。结果字符串为 s = "der"
  • 小明接着,他可以移除加下划线的子字符串 s = "++d++er",其中包含 0 个元音。结果字符串为 s = "er"
  • 小红再次操作,她可以移除整个字符串 s = "++er++",其中包含 1 个元音。
  • 又轮到小明,由于字符串为空,无法执行移除操作,因此小红赢得游戏。

示例 2:

输入: s = "bbcd"

输出: false

解释:

小红在她的第一回合无法执行移除操作,因此小红输掉了游戏。

提示:

  • 1 <= s.length <= 105
  • s 仅由小写英文字母组成。

我的解答:

复制代码
class Solution {
    public boolean doesAliceWin(String s) {
        /**
         * 小红获胜条件,初始子串和小明操作后的子串中剩余元音字母的数量为奇数
         * 小明获胜条件,小红操作后的子串剩余元音字母的数量为偶数
         * 但当子串中有n个元音字母(n > 0)时,
         * 若n为偶数,小红进行操作后,会变为奇数,小明无法取走剩余元音,若为奇数时,小红可以直接取走所有元音
         * 若n为奇数,小明进行操作后,依旧剩余奇数个,小红可直接取走所有元音
         * 即初始子串中无论有多少个元音字母,只要有,都是小红获胜,
         *  当且仅当初始子串不包含元音时,即小红第一回合就无法操作时,小明赢
         */
         for(char ch : s.toCharArray()){
            switch(ch){
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                    return true;
            }
         }
         return false;
    }
}
相关推荐
lhldsg2 分钟前
AI智能商城实战指南:从架构设计到落地开发经验分享
java·人工智能·经验分享·小程序
ai产品老杨3 分钟前
明火识别算法接入AI视频分析平台全流程与误报优化指南(附接口字段与排查表)
人工智能·算法·音视频
讨厌吃蛋黄酥6 分钟前
📚408数据结构|最短路径算法一篇彻底搞懂!BFS、Dijkstra、Floyd别再傻傻分不清了
算法
lhldsg9 分钟前
树洞交友系统开发实战:从匿名社交需求到技术落地
java·小程序·uni-app·交友
数智启示录23 分钟前
实时数据湖 Flink CDC + Kafka +Doris 【企业级实战】之Kafka 事件缓冲层 【附核心源码】 04
java·大数据·flink·kafka·数据库开发
AI人工智能+电脑小能手24 分钟前
大白话说Java设计模式-41-备忘录模式(源码剖析篇)
java·设计模式·备忘录模式·源码分析·serializable·undo log·spring statemachine
lv__pf25 分钟前
Sentinel【TL微服务10、11】
java·微服务·sentinel
Escalating_xu42 分钟前
【C++ string 上篇】从字符串基础到容量管理、迭代器与经典算法题
java·c++·算法
曹牧1 小时前
Java:Java 数组转 List
java·开发语言·windows
Keven_111 小时前
算法札记:ACM中将高精度算法融于题目的模板
算法·acm·精度