package com.fishercoder.solutions; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class _345 { public static class Solution1 { public String reverseVowels(String s) { StringBuilder sb = new StringBuilder(s); Set<Character> vowels = new HashSet(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')); //use two pointers approach would be the fastest int i = 0; int j = s.length() - 1; while (i < j) { char left = s.charAt(i); char right = s.charAt(j); while (i < j && !vowels.contains(left)) { i++; left = s.charAt(i); } while (i < j && !vowels.contains(right)) { j--; right = s.charAt(j); } char temp = left; sb.setCharAt(i, right); sb.setCharAt(j, temp); i++; j--; } return sb.toString(); } } }