C#
C++
Go
Java
Python
JavaScript
public class Solution
{
public static string ReverseVowels(string s)
{
int p1 = 0;
int p2 = s.Length - 1;
HashSet<char> vowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };
char[] word = s.ToCharArray();
while (p1 < p2)
{
if (!vowels.Contains(s[p1]))
{
p1++;
}
else if (!vowels.Contains(s[p2]))
{
p2--;
}
else
{
char temp = word[p1];
word[p1] = word[p2];
word[p2] = temp;
p1++;
p2--;
}
}
return new string(word);
}
}
#include <string>
#include <unordered_set>
using namespace std;
string reverseVowels(string s) {
int p1 = 0;
int p2 = s.length() - 1;
unordered_set<char> vowels = {'a', 'e', 'i', 'o', 'u'};
while (p1 < p2) {
if (vowels.find(s[p1]) == vowels.end()) {
p1++;
} else if (vowels.find(s[p2]) == vowels.end()) {
p2--;
} else {
swap(s[p1], s[p2]);
p1++;
p2--;
}
}
return s;
}
package main
func reverseVowels(s string) string {
p1 := 0
p2 := len(s) - 1
vowels := map[rune]struct{}{'a': {}, 'e': {}, 'i': {}, 'o': {}, 'u': {}}
word := []rune(s)
for p1 < p2 {
if _, ok := vowels[rune(s[p1])]; !ok {
p1++
} else if _, ok := vowels[rune(s[p2])]; !ok {
p2--
} else {
word[p1], word[p2] = word[p2], word[p1]
p1++
p2--
}
}
return string(word)
}
import java.util.*;
public class Solution {
public String reverseVowels(String s) {
int p1 = 0;
int p2 = s.length() - 1;
Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u'));
char[] word = s.toCharArray();
while (p1 < p2) {
if (!vowels.contains(word[p1])) {
p1++;
} else if (!vowels.contains(word[p2])) {
p2--;
} else {
char temp = word[p1];
word[p1] = word[p2];
word[p2] = temp;
p1++;
p2--;
}
}
return new String(word);
}
}
from typing import *
def reverse_vowels(s: str) -> str:
p1 = 0
p2 = len(s) - 1
vowels = {'a', 'e', 'i', 'o', 'u'}
word = list(s)
while p1 < p2:
if s[p1] not in vowels:
p1 += 1
elif s[p2] not in vowels:
p2 -= 1
else:
word[p1], word[p2] = word[p2], word[p1]
p1 += 1
p2 -= 1
return "".join(word)
/**
* @param {string} s
* @returns {string}
*/
export function reverseVowels(s) {
let p1 = 0;
let p2 = s.length - 1;
const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
const word = s.split('');
while (p1 < p2) {
if (!vowels.has(s[p1])) {
p1 += 1;
} else if (!vowels.has(s[p2])) {
p2 -= 1;
} else {
[word[p1], word[p2]] = [word[p2], word[p1]];
p1 += 1;
p2 -= 1;
}
}
return word.join('');
}