Invertir Vocales de un String
Este problema consiste en, dada una cadena s, invertir únicamente todas las vocales que contiene y regresar el resultado. Las vocales son a, e, i, o, u, tanto en minúscula como en mayúscula.
Solución
class Solution {
public:
bool esVocal(char c) {
return c == 'a' || c == 'e' || c == 'i' ||
c == 'o' || c == 'u' ||
c == 'A' || c == 'E' || c == 'I' ||
c == 'O' || c == 'U';
}
string reverseVowels(string s) {
int der = s.size() - 1;
int izq = 0;
while (der > izq) {
while (izq < der && !esVocal(s[izq]))
izq++;
while (der > izq && !esVocal(s[der]))
der--;
swap(s[izq], s[der]);
der--;
izq++;
}
return s;
}
};
Se usan dos punteros, uno al inicio (izq) y otro al final (der). El puntero izquierdo avanza mientras el carácter no sea vocal, y el derecho retrocede con la misma condición. Cuando ambos apuntan a una vocal, se intercambian y se mueven un paso hacia el centro. El proceso termina cuando los punteros se cruzan, dejando las vocales en orden invertido y las consonantes intactas.