題目指路
題目描述:
編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。
示例 1:
輸入:「hello」
輸出:「holle」
示例 2:
輸入:「leetcode」
輸出:「leotcede」
思路一(比較菜的雙指標):
兩邊的指標逐漸向中間逼近,直到兩指標重合跳出迴圈。
兩指標移動的時候分為以下幾種情況:
1.當左指標沒有指向母音字母,右指標也沒有指向母音字母時,這種情況一般多見於初始狀態(當然,初始狀態時也可能有指標指向母音字母的情況),此時,左指標向右移動;
2.當左指標指向母音字母,右指標沒有指向母音字母時,左指標停止移動,右指標向左移動;
3.當左指標和右指標同時指向母音字母時,兩母音字母執行交換操作,交換之後,左指標向右移動,此時還需要先檢查移動後的左指標與右指標有沒有重合,若重合則跳出迴圈;若沒有重合,右指標也向左移動;
4.當左指標沒有指向母音字母,右指標指向母音字母時,右指標停止移動,左指標向右移動;
所有的前提還得判斷字串不是「」。
);這塊可以稍微優化一下
後圖將迴圈條件修改了一下。
以上優化可以誕生出思路二(稍微優化一點的雙指標):
為了降低時間複雜度,可以適當將移動乙個指標變為同時移動兩個指標。以下思路中,將符合最後乙個判斷條件的情況改為同時移動兩個指標。
簡化了一下判斷條件
1.當左指標指向的不是母音字母時,左指標向右移動;
2.當右指標指向的不是母音字母時,右指標向左移動;
3.當以上兩個條件都不滿足時,即左指標和右指標指向的都是母音字母,則交換位置,左指標向右移動,右指標向左移動;
前面幾種思路一直困擾的乙個問題是,轉換成string型別的陣列比轉換成char型的陣列慢,所以我們這一次嘗試轉換成char型別的陣列,還是採用思路三中雙指標的方法。
;再將下圖的這一部分進行修改
變為以下**
LeetCode刷題 演算法篇
暴力解法 class solution def twosum self,nums list int target int list int i 0 while i j i 1 while j if nums i nums j target return i,j j 1i 1 return none ...
leetcode刷題 開始篇
第一道題 reverse words in a string.也就是說翻轉乙個字串的單詞。例如輸入為 hello world,it suck but i love it.輸出為 it love it but suck it world,hello 基本思路為 首先進行整個字串的reverse。然後對...
演算法 LeetCode刷題
given 1,3 2,6 8,10 15,18 return 1,6 8,10 15,18 關鍵就是a 1 b 0 也就是array i 1 1 array i 0 const merge array return array console.log merge 1,3 8,10 2,6 15,1...