LeetCode 345. 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 }

AC C++:

 1 class Solution {
 2 public:
 3     string reverseVowels(string s) {
 4          set<char> set = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
 5          int i = 0;
 6          int j = s.size() - 1;
 7          while(i < j){
 8              while(i < j && set.find(s[i]) == set.end()){
 9                  i++;
10              }
11 
12              while(i < j && set.find(s[j]) == set.end()){
13                  j--;
14              }
15 
16              swap(s[i], s[j]);
17              i++;
18              j--;
19          }
20 
21          return s;
22     }
23 };

 

posted @ 2016-08-27 07:08  Dylan_Java_NYC  阅读(243)  评论(0编辑  收藏  举报