1. 程式人生 > >leetcode 345 Reverse Vowels of a String(翻轉支付串中的母音字母)

leetcode 345 Reverse Vowels of a String(翻轉支付串中的母音字母)

題目要求

寫一個函式,實現對於給定的字串中的母音字母進行翻轉。
注意輸入均為小寫,或者大寫字母。

演示示例

Example 1
Input: “hello”
Output: “holle”

Example 2
Input: “leetcode”
Output: “leotcede”

解題思路

由於本題目中說明輸入只有字母類字元,所以不像題目leetcode125中對特殊字元進行判斷。
按照我們平時的思路是對字串進行翻轉(reverse函式),但是題目要求只對母音字母進行相應的翻轉,所以解題目的關鍵: 就是找到輸入字串中的母音字母。
具體程式中,我們用兩個變數(類雙指標法

)分別從頭和尾開始遍歷,
當頭遇到母音字母的時候記下下標1,然後進行尾端遍歷直到遇到母音字母記下下標2
隨後進行交換操作(swap()函式),重複上述操作直到兩個變數相遇,遍歷結束。

主要程式碼 c++

class Solution {
public:
    string reverseVowels(string s) {
      int left = 0, right = s.size()-1; // 兩個遍歷變數
      while(left<right)
      {
          while(left<right && !isVowels
(s[left])) left++; while(left<right && !isVowels(s[right])) right--; if(left<right) { swap(s[left],s[right]); left++, right--; } } return s; } bool isVowels(
char c) // 判斷母音函式 { return (c == 'A'|| c == 'E'|| c == 'I'|| c=='O'|| c=='U'||c == 'a'|| c == 'e'|| c == 'i'|| c=='o'|| c=='u'); } };

其他方法

此外,也可以先遍歷整個字串,用一個容器記下母音字元的下標,再遍歷容器,進行字串的交換操作,只是兩次遍歷操作比上述提出的方法要消耗更多的時間資源。

原題連結 https://leetcode.com/problems/reverse-vowels-of-a-string/