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”。
廣告