C++ 字串中反轉母音


給定一個字串,任務是反轉給定字串中存在的所有母音。例如,

輸入-1

a = “tutor”

輸出

totur

解釋 − 反轉字串“tutor”將生成輸出“totur”。

輸入-2

a = “mathematics”

輸出

mithametacs

解釋 − 反轉字串“mathematics”將生成輸出“mithametacs”。

解決此問題的方法

給定一個字串,我們必須反轉其中存在的所有母音。解決此特定問題有幾種方法,但我們必須線上性時間 O(n) 內解決此問題。

因此,解決此問題的更好方法是使用雙指標方法,在該方法中,我們將採用兩個指標 low 和 high,它們最初將分別指向最左邊的元素和最右邊的元素。在兩個巢狀迴圈中,我們將檢查最左邊的字元是否為母音,最右邊的字元是否也為母音,然後交換元素並移動右指標。

  • 輸入一個字串。

  • 一個布林函式來檢查字元是否為母音。

  • 一個函式 reverseVowel(string &str) 以字串作為輸入並反轉字串中存在的母音。

  • 初始化兩個指標 low 和 high,分別指向“0”和最後一個字元。

  • 檢查最左邊的字元和最右邊的字元,如果它們是母音,則就地交換字元並遞減最右邊的指標。

  • 重複這些步驟,直到訪問完字串的所有字元。

示例

 現場演示

#include <bits/stdc++.h>
using namespace std;
bool isVowel(char ch) {
   return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
string reverseVowel(string &s){
   int low = 0;
   int high = s.size() - 1;
   while (low < high) {
      while (low < high && !isVowel(s[low])) {
         low ++;
      }
      while (low < high && !isVowel(s[high])) {
         high --;
      }
      swap(s[low++], s[high--]);
   }
   return s;
}
int main(){
   string a= "tutorialspoint";
   string ans= reverseVowel(a);
   cout<<ans;
   return 0;
}

輸出

執行以上程式碼將生成如下輸出:

titorailspount

由於給定的字串“tutorialspoint”包含母音,因此在反轉母音後,它將生成輸出“titorailspount”。

更新於: 2021年2月5日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告