LeetCode Reverse Vowels of a String

原题链接在这里:https://leetcode.com/problems/reverse-vowels-of-a-string/

题目:

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".

题解:

典型的two pointers, 到了vowel时对调.

Note: 对调完要再移动双指针.

若用到Array.asList(arr), arr 这里要用Character型,而不是char型. 

Time Complexity: O(s.length()). Space:O(s.length()), 因为建立了char array.

AC Java:

 1 class Solution {
 2     Character [] vowels = {'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
 3     
 4     public String reverseVowels(String s) {
 5         if(s == null || s.length() == 0){
 6             return s;
 7         }
 8         
 9         HashSet<Character> hs = new HashSet<Character>(Arrays.asList(vowels));
10         
11         int i = 0; 
12         int j = s.length()-1;
13         char [] sArr = s.toCharArray();
14         
15         while(i<j){
16             while(i<j && !hs.contains(sArr[i])){
17                 i++;
18             }
19             
20             while(i<j && !hs.contains(sArr[j])){
21                 j--;
22             }
23             
24             swap(sArr, i, j);
25             i++;
26             j--;
27         }
28         
29         return new String(sArr);
30     }
31     
32     private void swap(char [] arr, int i, int j){
33         char temp = arr[i];
34         arr[i] = arr[j];
35         arr[j] = temp;
36     }
37 }
原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/5812211.html