iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Python

30天挑戰 LeetCode 75系列 第 5

[Day 05] LeetCode 75 - Reverse Vowels of a String

  • 分享至 

  • xImage
  •  

Reverse Vowels of a String

345. Reverse Vowels of a String

題目敘述

這題目標是給定一個字串,將字串中的所有母音字母(a、e、i、o、u 和它們的大寫形式 A、E、I、O、U)進行反轉,其他非母音字母的位置保持不變。

舉例來說,如果輸入字串為 "hello",那麼反轉後的字串應該是 "holle",因為字串中的母音 "e" 和 "o" 被交換了。

解題思路

解題的核心想法是找出字串中的所有母音字母,並將它們進行反轉放回到原來的位置。具體步驟如下:

  1. 建立母音集合:我們可以預先定義一個包含所有母音字母的集合(包括大寫和小寫)。
  2. 提取母音字母:遍歷整個字串,將所有遇到的母音字母依序存入一個列表。
  3. 構建新字串:再次遍歷字串,當遇到母音字母時,從之前提取的列表中依序取出最後一個母音字母,並替換當前的母音;如果遇到的是非母音字母,則保持不變。
  4. 返回結果:將新構建的字串作為最終結果返回。

程式碼

以下是解決這個問題的 Python 程式碼實現:

class Solution:
    def reverseVowels(self, s: str) -> str:

        VOWELS = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}
        appearedVowels = [letter for letter in s if letter in VOWELS]
        result = ""
        for letter in s:
            if letter in VOWELS:
                result += appearedVowels.pop(-1)
            else:
                result += letter
        return result

解釋:

  • VOWELS:這個集合包含了所有的小寫和大寫母音字母,以便快速查找字母是否為母音。此程式碼我用字典的形式,其實用字串的形式(VOWELS = "aeiouAEIOU")也可以。
  • appearedVowels:這個列表儲存了字串中出現的所有母音字母,順序是從左到右提取的。
  • 反轉母音:當我們再次遍歷字串時,遇到母音字母就從 appearedVowels 中取出最後一個,這樣實現了反轉效果。
  • pop(-1):每次取出列表中的最後一個元素,也就是最後出現的母音,來達到反轉的目的。

這個解法的時間複雜度是 O(n),其中 n 是字串的長度。我們需要遍歷字串兩次:第一次提取母音,第二次構建結果字串。


上一篇
[Day 04] Leetcode 75 - Can Place Flowers
系列文
30天挑戰 LeetCode 755
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言