Reverse Vowels of a String
Reverse only the vowels of a string, leaving all other characters in place. Two-pointer technique.
Sample input
hello
Sample output
holle
Solution
def reverse_vowels(s):
vowels = set("aeiouAEIOU")
chars = list(s)
i, j = 0, len(chars) - 1
while i < j:
if chars[i] not in vowels:
i += 1
elif chars[j] not in vowels:
j -= 1
else:
chars[i], chars[j] = chars[j], chars[i]
i += 1
j -= 1
return "".join(chars)
print(reverse_vowels("hello"))
function reverseVowels(s) {
const vowels = new Set("aeiouAEIOU");
const chars = s.split("");
let i = 0, j = chars.length - 1;
while (i < j) {
if (!vowels.has(chars[i])) i++;
else if (!vowels.has(chars[j])) j--;
else {
[chars[i], chars[j]] = [chars[j], chars[i]];
i++;
j--;
}
}
return chars.join("");
}
console.log(reverseVowels("hello"));
public class Main {
static String reverseVowels(String s) {
String vowels = "aeiouAEIOU";
char[] chars = s.toCharArray();
int i = 0, j = chars.length - 1;
while (i < j) {
if (vowels.indexOf(chars[i]) == -1) i++;
else if (vowels.indexOf(chars[j]) == -1) j--;
else {
char t = chars[i]; chars[i] = chars[j]; chars[j] = t;
i++;
j--;
}
}
return new String(chars);
}
public static void main(String[] args) {
System.out.println(reverseVowels("hello"));
}
}
fun reverseVowels(s: String): String {
val vowels = "aeiouAEIOU"
val chars = s.toCharArray()
var i = 0
var j = chars.size - 1
while (i < j) {
when {
chars[i] !in vowels -> i++
chars[j] !in vowels -> j--
else -> {
val t = chars[i]; chars[i] = chars[j]; chars[j] = t
i++
j--
}
}
}
return String(chars)
}
fun main() {
println(reverseVowels("hello"))
}
func reverseVowels(_ s: String) -> String {
let vowels = Set("aeiouAEIOU")
var chars = Array(s)
var i = 0, j = chars.count - 1
while i < j {
if !vowels.contains(chars[i]) {
i += 1
} else if !vowels.contains(chars[j]) {
j -= 1
} else {
chars.swapAt(i, j)
i += 1
j -= 1
}
}
return String(chars)
}
print(reverseVowels("hello"))
String reverseVowels(String s) {
const vowels = 'aeiouAEIOU';
final chars = s.split('');
var i = 0, j = chars.length - 1;
while (i < j) {
if (!vowels.contains(chars[i])) {
i++;
} else if (!vowels.contains(chars[j])) {
j--;
} else {
final t = chars[i];
chars[i] = chars[j];
chars[j] = t;
i++;
j--;
}
}
return chars.join();
}
void main() {
print(reverseVowels("hello"));
}
#include <iostream>
#include <string>
using namespace std;
bool isVowel(char c) {
return string("aeiouAEIOU").find(c) != string::npos;
}
string reverseVowels(string s) {
int i = 0, j = s.size() - 1;
while (i < j) {
if (!isVowel(s[i])) i++;
else if (!isVowel(s[j])) j--;
else {
swap(s[i], s[j]);
i++;
j--;
}
}
return s;
}
int main() {
cout << reverseVowels("hello") << endl;
return 0;
}
#include <stdio.h>
#include <string.h>
int isVowel(char c) {
return strchr("aeiouAEIOU", c) != NULL;
}
int main() {
char s[] = "hello";
int i = 0, j = strlen(s) - 1;
while (i < j) {
if (!isVowel(s[i])) i++;
else if (!isVowel(s[j])) j--;
else {
char t = s[i]; s[i] = s[j]; s[j] = t;
i++;
j--;
}
}
printf("%s\n", s);
return 0;
}