Question4 Reverse Vowels of a String
// Some code
/*
clarification & assumption
- input: regular string
- output: string
- example: hello
- if left is not vowels, left++
- if right is not vowels, right--;
- if both are vowels swap
- until two index same
high level: two index, until swap all
middle level: see example
tc & sc : O(n), O(1)
*/
class Solution {
public String reverseVowels(String s) {
// sanity check
if (s == null || s.length() == 0) {
return s;
}
Set<Character> vowelMap = buildMap();
char[] charString = s.toCharArray();
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (!vowelMap.contains(charString[left])) {
left++;
}
else if (!vowelMap.contains(charString[right])) {
right--;
}
else {
swap(charString, left, right);
left++;
right--;
}
}
return new String(charString);
}
private void swap(char[] charString, int left, int right) {
char tmp = charString[left];
charString[left] = charString[right];
charString[right] = tmp;
}
private Set<Character> buildMap() {
Set<Character> vowelMap = new HashSet<>();
vowelMap.add('a');
vowelMap.add('e');
vowelMap.add('i');
vowelMap.add('o');
vowelMap.add('u');
vowelMap.add('A');
vowelMap.add('E');
vowelMap.add('I');
vowelMap.add('O');
vowelMap.add('U');
return vowelMap;
}
}
```
Last updated