weekly contest 407。其實比較像腦筋急轉彎。

題目

Alice 和 Bob 在玩字串遊戲。

輸入字串 s。從 Alice 先手,兩人輪流按照以下規則行動:

  • Alice 必須從 s 中刪除一個包含奇數個母音的子字串
  • Bob 必須從 s 中刪除一個包含偶數個母音的子字串

當某一方無法行動就算敗北。

在兩人都做出最優行動的前提之下,若 Alice 能獲勝則回傳 true,否則回傳 false。

解法

其實刪除子陣列還是子序列根本無所謂,重點只在於剩下幾個母音

分類討論母音個數 cnt 的兩種情況:

  • cnt 是奇數,Alice 可以全拿,下一回 Bob 就輸了
  • cnt 是偶數,Alice 可以拿到剩 1 個,下一回 Bob 也輸了

好像 Alice 優勢很大,隨便玩都贏。
但別忘記最初可能半個母音都沒有,那 Alice 開場直接輸。

時間複雜度 O(N)。
空間複雜度 O(1)。

class Solution:
    def doesAliceWin(self, s: str) -> bool:
        return sum(c in "aeiou" for c in s) > 0