使用C++程式將字串中所有子音替換為最近的母音
此方法旨在將子音字串替換為字母表中最接近的母音(也稱為小寫拉丁字母)。如果兩個母音的距離相等,我們可以用這些字母中的第一個替換它們。
讓我們來看一些輸入場景:
假設我們有一個字串,例如“ebgkjasjd”,現在我們需要將字串中所有存在的子音替換為最近的母音。
Input = "ebgkjasjd"; Result = ebgkjasjd eaeiiauie
以元素“b”為例,我們可以用“a”替換它,因為它是最近的母音。我們可以用“e”或“i”替換元素“g”,因為兩者距離都相等,但我們用“e”替換它,因為它排在前面。字串中所有其他元素也是如此。
假設輸入字串中沒有任何母音,例如,考慮一個字串:“sdfhgtykl”,則將獲得以下結果:
Input = "sdfhgtykl"; Result = sdfhgtykl ueeieuuii
對於第一個元素“s”,母音“u”是最接近的,因此“s”被替換為“u”。陣列中的所有其他元素也是如此,因為它們都是子音。這種情況也產生了此方法的最壞情況複雜度。
演算法
從起始索引遍歷輸入字串。
如果遇到子音,則計算從子音到左右兩個最近母音的字母數量。將選擇字母數量較少的母音。
重複此過程,直到遍歷字串中的所有子音。
獲得的輸出是替換後的字串。
示例
以下是C++實現,用於將字串中所有子音替換為字母表中最接近的母音:
#include <iostream> using namespace std; void solve(string& s) { for(char &ch : s) { if(ch>'a' && ch<'e') { if(ch-'a' <= 'e'-ch) ch='a'; else ch='e'; } else if(ch>'e' && ch<'i') { if(ch-'e' <= 'i'-ch) ch='e'; else ch='i'; } else if(ch>'i' && ch<'o') { if(ch-'i' <= 'o'-ch) ch='i'; else ch='o'; } else if(ch>'o' && ch<'u') { if(ch-'o' <= 'u'-ch) ch='o'; else ch='u'; } else if(ch>'u') { ch = 'u'; } } } int main() { string s = "ibgshzjbsh"; cout << s << "\n"; solve(s); cout << s; return 0; }
輸出
“ibgshzjbsh” “iaeuiuiaui”
示例
但是,與其使用大量的if-else條件,更好的方法是使用陣列併為每個字元儲存最近字元的答案。
#include <iostream> #include <vector> using namespace std; string solve(string s) { string hash = "aaaeeeeiiiiioooooouuuuuuuu"; for (int i=0;i<s.size();i++) { s[i] = hash[s[i]-'a']; } return s; } int main() { string s = "ibgshzjbsh"; cout << solve(s); return 0; }
輸出
iaeuiuiaui
結論
我們可以透過查詢並用最近的字元替換元素來替換元素。遍歷字串一次即可獲得O(n)的時間複雜度。第二種方法更容易理解和編碼。這種方法的時間複雜度也是O(n),因為我們只遍歷字串一次。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP