# 345 Reverse Vowels of a String

## 345. [Reverse Vowels of a String](https://leetcode.com/problems/reverse-vowels-of-a-string/description/)

## 1. Question

Write a function that takes a string as input and reverse only the vowels of a string.

**Example 1:**\
Given s = "hello", return "holle".

**Example 2:**\
Given s = "leetcode", return "leotcede".

**Note:**\
The vowels does not include the letter "y".

## 2. Implementation

**(1) Two Pointers**

```java
class Solution {
    public String reverseVowels(String s) {
        if (s == null || s.length() == 0) {
            return s;
        }

        String vowels = "aeiouAEIOU";

        char[] letters = s.toCharArray();
        int start = 0, end = s.length() - 1;

        while (start < end) {
            while (start < end && vowels.indexOf(letters[start]) < 0) {
                ++start;
            }

            while (start < end && vowels.indexOf(letters[end]) < 0) {
                --end;
            }

            if (start >= end) {
                break;
            }

            swap(letters, start, end);
            ++start;
            --end;
        }
        return new String(letters);
    }

    public void swap(char[] letters, int start, int end) {
        char temp = letters[start];
        letters[start] = letters[end];
        letters[end] = temp;
    }
}
```

## 3. Time & Space Complexity

**Two Pointers:** 时间复杂度O(n), 空间复杂度O(1)
