Diese Methode zielt darauf ab, eine Folge von Konsonanten durch die nächsten Vokale im Alphabet (auch als lateinische Kleinbuchstaben bezeichnet) zu ersetzen. Wenn zwei Vokale gleich nahe beieinander liegen, können wir sie durch den ersten Vokal in diesen Buchstaben ersetzen.
Schauen wir uns einige Eingabeszenarien an -
Angenommen, wir haben eine Zeichenfolge wie „ebgkjasjd“, jetzt müssen wir alle Vorkommen von Konsonanten in der Zeichenfolge durch die nächsten Vokale ersetzen.
Input = "ebgkjasjd"; Result = ebgkjasjd eaeiiauie
Ersetzen Sie das Element „b“ durch „a“, da es der nächste Vokal ist. Wir hätten das Element „g“ durch „e“ oder „i“ ersetzen können, da beide gleich aktuell sind, aber wir entscheiden uns dafür, es durch „e“ zu ersetzen, da es zuerst kam. Das Gleiche gilt für alle anderen Elemente in der Zeichenfolge.
Angenommen, die Eingabezeichenfolge enthält beispielsweise keine Vokale, betrachten Sie eine Zeichenfolge: „sdfhgtykl“, die resultierende Ausgabe ist -
Input = "sdfhgtykl"; Result = sdfhgtykl ueeieuuii
Für das erste Element „s“ kommt der Vokal „u“ am nächsten, also ersetzen Sie „s“ durch „u“. Wie alle anderen Elemente im Array sind sie Konsonanten. Diese Situation ergibt auch die Worst-Case-Komplexität der Methode.
Durchlaufen Sie die Eingabezeichenfolge ausgehend vom Startindex.
Wenn ein Konsonant angetroffen wird, wird die Anzahl der Buchstaben von diesem Konsonanten bis zu den beiden nächsten Vokalen links und rechts gezählt. Wählen Sie Vokale mit weniger Buchstaben.
Dieser Vorgang wird wiederholt, bis alle Konsonanten in der Zeichenfolge durchlaufen wurden.
Die erhaltene Ausgabe ist die ersetzte Zeichenfolge.
Der folgende Code ist in C++ implementiert, um alle Konsonanten in einer Zeichenfolge durch die nächsten Vokale im Alphabet zu ersetzen -
#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”
Ein besserer Ansatz besteht jedoch darin, ein Array zu verwenden und für jedes Zeichen die Antwort mit dem nächsten Zeichen zu speichern, anstatt viele Wenn-Sonst-Bedingungen zu verwenden.
#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
Wir können ein Element ersetzen, indem wir es finden und durch das nächstgelegene Zeichen ersetzen. Die zeitliche Komplexität des Durchlaufens einer Zeichenfolge beträgt O(n). Die zweite Methode ist einfacher zu verstehen und zu programmieren und weniger umständlich. Die zeitliche Komplexität beträgt ebenfalls O(n), da wir die Zeichenfolge nur einmal durchlaufen.
Das obige ist der detaillierte Inhalt vonErsetzen Sie mit einem C++-Programm alle Konsonanten in der Zeichenfolge durch den nächsten Vokal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!