付費限定

反轉字串中的母音 Reverse Vowels of a String_Leetcode 精選75題解析

更新於 發佈於 閱讀時間約 4 分鐘

題目敘述

題目會給定我們一個字串s,要求我們反轉字串s中所有母音字元的順序,並且以字串的形式輸出。

註: 母音字元為a, e, i, o, u 或者 A, E, I, O, U

題目的原文敘述


測試範例

Example 1:

Input: s = "hello"
Output: "holle"

Example 2:

Input: s = "leetcode"
Output: "leotcede"

約束條件

Constraints:

  • 1 <= s.length <= 3 * 10^5
  • s consist of printable ASCII characters.

演算法

這一題基本想法滿直覺的,就是用雙指針,一個從左邊往右掃,一個從右邊往左邊掃。每當遇到母音時,就互換位置,反覆迭代,最後雙指針交會時,反轉程序就完成了。

唯一一個實作上要注意的細節是,python string 不像c++ string那樣可以直接透過s[i]去修改,在python 裡面,所有字串都是immutable 不可變的

因此,我們必須先把字串轉成字元陣列的形式,接著反轉母音順序,最後再輸出為字串,作為最後的答案。

raw-image

Python 官方文件對於string的說明


程式碼

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

vowel = {'a', 'e', 'i', 'o', 'u','A', 'E', 'I', 'O', 'U'}

new_s = list(s) # use python list as buffer for element swap
last_index = len(s)-1
left, right = 0, last_index # initialization for two pointers

while left <= right:

while left <= right and s[left] not in vowel: left +=1
while left <= right and s[right] not in vowel: right -=1

if left > right:
break

# swap vowel
new_s[ left ], new_s[ right ] = new_s[ right ], new_s[ left ]

left, right = left+1, right-1

return ''.join(new_s)

複雜度分析

時間複雜度:O(n)

時間成本落在while loop迭代,線性掃描,頭尾雙指針往中間逼近,所需時間為O(n)

空間複雜度:O(n)

會需要建立額外的暫存空間new_s,來存放字元陣列,所需空間為O(n)

以行動支持創作者!付費即可解鎖
本篇內容共 1736 字、1 則留言,僅發佈於Leetcode精選75題 解析+統整你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
avatar-img
91會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給定一個陣列candies和一個整數extraCandies作為輸入。 陣列candies代表每一位小朋友手上擁有的糖果總數。 問我們,從頭到尾每一位小朋友,如果多給extraCandies顆糖果給其中某一位小朋友,那位小朋友拿到的糖果數量是不是最多的?假如是,則標記為True
題目敘述 題目會給定兩個輸入字串str1和str2,要求我們找出這兩個字串的最大共同子字串。 如果無解,則返回空字串""。 題目的原文敘述 測試範例 Example 1: Input: str1 = "ABCABC", str2 = "ABC" Output: "ABC" Exam
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
題目敘述 題目會給我們兩個輸入,字串s和字串t,要求我們判定s是否為t的子序列(Subsequence)? 題目的原文敘述 測試範例 Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input:
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
題目敘述 題目會給定一個陣列candies和一個整數extraCandies作為輸入。 陣列candies代表每一位小朋友手上擁有的糖果總數。 問我們,從頭到尾每一位小朋友,如果多給extraCandies顆糖果給其中某一位小朋友,那位小朋友拿到的糖果數量是不是最多的?假如是,則標記為True
題目敘述 題目會給定兩個輸入字串str1和str2,要求我們找出這兩個字串的最大共同子字串。 如果無解,則返回空字串""。 題目的原文敘述 測試範例 Example 1: Input: str1 = "ABCABC", str2 = "ABC" Output: "ABC" Exam
題目敘述 題目會給定我們兩個輸入字串word1, word2,要求我們依照word1,word2,word1,word2, ... 交叉前進的方式,合併兩個字串,作為輸出。 題目的原文敘述 測試範例 Example 1: Input: word1 = "abc", word2 = "pq
題目敘述 題目會給我們兩個輸入,字串s和字串t,要求我們判定s是否為t的子序列(Subsequence)? 題目的原文敘述 測試範例 Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input:
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
一、客語的輔音與聲母 二、客語的元音與韻母 三、客語的聲調 四、客語的音節結構
Thumbnail
一、華語的輔音與聲母 二、華語的元音與韻母 三、華語的聲調 四、華語的音節結構
Thumbnail
以注音為排序標準,範圍為N5-N3的日語漢字筆記。 本次排序為ㄕ。
Thumbnail
以注音為排序標準,範圍為N5-N3的日語漢字筆記。 本次排序為ㄑ。
Thumbnail
看到題目問「種類」時,集合就是你最好的朋友。
Thumbnail
透過適當的語言和文字表達,人們可以溝通訊息和態度。轉折詞的運用和標點符號的使用會影響溝通的準確性和情緒表達。
Thumbnail
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
外語的迷惑顛倒: 音,全社會都不懂不屑也不管; 形、義,則是同時間一起硬學。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
一、客語的輔音與聲母 二、客語的元音與韻母 三、客語的聲調 四、客語的音節結構
Thumbnail
一、華語的輔音與聲母 二、華語的元音與韻母 三、華語的聲調 四、華語的音節結構
Thumbnail
以注音為排序標準,範圍為N5-N3的日語漢字筆記。 本次排序為ㄕ。
Thumbnail
以注音為排序標準,範圍為N5-N3的日語漢字筆記。 本次排序為ㄑ。
Thumbnail
看到題目問「種類」時,集合就是你最好的朋友。
Thumbnail
透過適當的語言和文字表達,人們可以溝通訊息和態度。轉折詞的運用和標點符號的使用會影響溝通的準確性和情緒表達。
Thumbnail
在比賽裡這就是大家拚手速的題目了,準備好了嗎?
Thumbnail
外語的迷惑顛倒: 音,全社會都不懂不屑也不管; 形、義,則是同時間一起硬學。