Reverse Vowels of a String
EasyTwo PointersString
Solution
export function reverseVowels(s: string): string {
const vowelSet = new Set<string>('aeiou');
const isVowel = (char: string) => vowelSet.has(char.toLowerCase());
const arr = Array.from(s);
const vowels = arr.filter(isVowel).reverse();
let currentIndex = 0;
let answer = '';
for (const char of s) {
if (isVowel(char)) {
answer += vowels[currentIndex++];
} else {
answer += char;
}
}
return answer;
}
/** Another ways: Two Pointer
function reverseVowels(s: string): string {
const arr = Array.from(s);
const set = new Set('aeiouAEIOU');
const isVowel = (char: string) => set.has(char);
let [start, end] = [0, arr.length - 1];
while (start < end) {
while (start < arr.length && !isVowel(arr[start])) {
start += 1;
}
while (0 <= end && !isVowel(arr[end])) {
end -= 1;
}
if (start < end) {
[arr[start], arr[end]] = [arr[end], arr[start]];
start += 1;
end -= 1;
}
}
return arr.join('');
}
*/