Cette méthode vise à remplacer une chaîne de consonnes par les voyelles les plus proches de l'alphabet (également appelées lettres latines minuscules). Si deux voyelles sont également proches, nous pouvons les remplacer par la première voyelle de ces lettres.
Regardons quelques scénarios d'entrée -
Supposons que nous ayons une chaîne, telle que "ebgkjasjd", nous devons maintenant remplacer toutes les occurrences de consonnes dans la chaîne par les voyelles les plus proches.
Input = "ebgkjasjd"; Result = ebgkjasjd eaeiiauie
Remplacez l'élément 'b' par 'a' puisque c'est la voyelle la plus proche. Nous aurions pu remplacer l'élément « g » par « e » ou « i » puisqu'ils sont tous deux également récents, mais nous choisissons de le remplacer par « e » puisqu'il est arrivé en premier. Il en va de même pour tous les autres éléments de la chaîne.
Supposons que si la chaîne d'entrée ne contient aucune voyelle, par exemple, considérons une chaîne : "sdfhgtykl", la sortie résultante est -
Input = "sdfhgtykl"; Result = sdfhgtykl ueeieuuii
Pour le premier élément 's', la voyelle 'u' est la plus proche, remplacez donc 's' par 'u'. Comme tous les autres éléments du tableau, ce sont des consonnes. Cette situation donne également lieu à la complexité la plus défavorable de la méthode.
Parcourez la chaîne d'entrée en commençant par l'index de départ.
Si une consonne est rencontrée, le nombre de lettres de cette consonne jusqu'aux deux voyelles les plus proches à gauche et à droite sera compté. Choisissez des voyelles avec moins de lettres.
Ce processus sera répété jusqu'à ce que toutes les consonnes de la chaîne aient été parcourues.
Le résultat obtenu est la chaîne remplacée.
Ce qui suit est un code implémenté en C++ pour remplacer toutes les consonnes d'une chaîne par les voyelles les plus proches de l'alphabet -
#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”
Cependant, une meilleure approche consiste à utiliser un tableau et à stocker la réponse de caractère la plus proche pour chaque caractère au lieu d'utiliser de nombreuses conditions 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
Nous pouvons remplacer un élément en le trouvant et en le remplaçant par le caractère le plus proche. La complexité temporelle du parcours d'une chaîne est O(n). La deuxième méthode est plus facile à comprendre et à coder, et moins lourde. La complexité temporelle est également O(n) puisque nous ne parcourons la chaîne qu'une seule fois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!