付費限定

反轉字串中的母音 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題 解析+統整你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給定一個陣列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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
歡迎回到我的學習筆記,今天我想分享一下在python中幾個反轉字串的作法,反轉字串的意思就像是將文字從「我愛你」變成「你愛我」。 談到反轉字串時,有幾種不同的方法,寫法如下: 以下反轉字串是寫成函式的樣子 1. 使用迴圈: 這是一個傳統的方法,使用迴圈來反轉字串。
Thumbnail
日本電影《假面病棟》描述男主角速水醫生,到了療養型醫院「田所病院」幫學長臨時值班。沒想到,第一天就遇上了帶小丑面具的不速之客,狹持院長、護理師及一位女大生川崎瞳。 兩位除了攜手合作,逃離小丑的魔掌外,更察覺到了醫院的不對勁。於是,他們決心要聯手揭開田所病院的神秘面紗。
Thumbnail
本篇內容與服務來至FIX Techvisor TW的獨家授權。 Traderclubx 交匯將提供以下的服務: 1.FB私密群組與FIX Techvisor TW負責人Jacky的
Thumbnail
人們容易在才正剛開始一件事時,就開始想像會出現一連串的挑戰或阻礙,常常真正的困難還沒來臨前,就把自已嚇得漸漸失去鬥志了。 如果,我們能因著才剛開始一件事時,想到會出現的挑戰或不會出現的好機會而影響我們的心志,這代表著我們的想像是非常有「力量」的! 那麼,那我們就試著把它倒轉吧!
Thumbnail
我吃過的鹽比你吃過的飯還多。所以我現在每年定期健康檢查。」「金錢買不到快樂。呃,但買得到假牙。」國家兩廳院這則「人生的真相」貼文,將大眾耳熟能詳的句子,搭配一句吃了「誠實豆沙包」的翻轉詮釋,發布第一晚就引發社群熱烈回響,最後貼文觸及近180萬人次,是貼文平均值的18倍。
#政風處在做什麼 屏東縣政府團隊在推動廉政工作,朝面對問題,解決問題為方針,依循「開放政府」、「資訊公開」、「透明政治」及「提升公益、解決民怨」的施政目標及核心價值,廉政工作中的防貪業務多年來運用各種工作方法及手段,真正目的就是在解決民怨。新思維的廉政就是主動瞭解機關風險所在,找出解決方法,包括主動
Thumbnail
大家到紐約時一定會和自由女神像拍照留念,但你知道自由女神像為群眾募資始祖嗎?隨著科技的進步,募資評臺也從報紙轉為網上,更是近年青年創業的好夥伴......
Thumbnail
她一直想被看見,她努力著,但一直不得法,直到有一天她用了最極至的方法,被看見了,但也是最後一面了。 阿拉絲又站在那了,每次女人們在河邊洗衣服時,總是會看到阿拉絲站在遠處的一座山坡上,站了很久很久...
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
歡迎回到我的學習筆記,今天我想分享一下在python中幾個反轉字串的作法,反轉字串的意思就像是將文字從「我愛你」變成「你愛我」。 談到反轉字串時,有幾種不同的方法,寫法如下: 以下反轉字串是寫成函式的樣子 1. 使用迴圈: 這是一個傳統的方法,使用迴圈來反轉字串。
Thumbnail
日本電影《假面病棟》描述男主角速水醫生,到了療養型醫院「田所病院」幫學長臨時值班。沒想到,第一天就遇上了帶小丑面具的不速之客,狹持院長、護理師及一位女大生川崎瞳。 兩位除了攜手合作,逃離小丑的魔掌外,更察覺到了醫院的不對勁。於是,他們決心要聯手揭開田所病院的神秘面紗。
Thumbnail
本篇內容與服務來至FIX Techvisor TW的獨家授權。 Traderclubx 交匯將提供以下的服務: 1.FB私密群組與FIX Techvisor TW負責人Jacky的
Thumbnail
人們容易在才正剛開始一件事時,就開始想像會出現一連串的挑戰或阻礙,常常真正的困難還沒來臨前,就把自已嚇得漸漸失去鬥志了。 如果,我們能因著才剛開始一件事時,想到會出現的挑戰或不會出現的好機會而影響我們的心志,這代表著我們的想像是非常有「力量」的! 那麼,那我們就試著把它倒轉吧!
Thumbnail
我吃過的鹽比你吃過的飯還多。所以我現在每年定期健康檢查。」「金錢買不到快樂。呃,但買得到假牙。」國家兩廳院這則「人生的真相」貼文,將大眾耳熟能詳的句子,搭配一句吃了「誠實豆沙包」的翻轉詮釋,發布第一晚就引發社群熱烈回響,最後貼文觸及近180萬人次,是貼文平均值的18倍。
#政風處在做什麼 屏東縣政府團隊在推動廉政工作,朝面對問題,解決問題為方針,依循「開放政府」、「資訊公開」、「透明政治」及「提升公益、解決民怨」的施政目標及核心價值,廉政工作中的防貪業務多年來運用各種工作方法及手段,真正目的就是在解決民怨。新思維的廉政就是主動瞭解機關風險所在,找出解決方法,包括主動
Thumbnail
大家到紐約時一定會和自由女神像拍照留念,但你知道自由女神像為群眾募資始祖嗎?隨著科技的進步,募資評臺也從報紙轉為網上,更是近年青年創業的好夥伴......
Thumbnail
她一直想被看見,她努力著,但一直不得法,直到有一天她用了最極至的方法,被看見了,但也是最後一面了。 阿拉絲又站在那了,每次女人們在河邊洗衣服時,總是會看到阿拉絲站在遠處的一座山坡上,站了很久很久...