
Given a string s, reverse only all the vowels in the string and return it.
The vowels are 'a', 'e', 'i', 'o', and 'u', and they can appear in both lower and upper cases, more than once.
406Please respect copyright.PENANAx0caySm4oa
Two Pointers
class Solution {406Please respect copyright.PENANAlcjo4bXJkH
// Return true if the character is a vowel (case-insensitive)406Please respect copyright.PENANArB5HTSIpd3
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU406Please respect copyright.PENANAEPn6N4yLTk
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。406Please respect copyright.PENANAnCZy0KuY5i
boolean isVowel(char c) {406Please respect copyright.PENANASpK3b8TyIG
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'406Please respect copyright.PENANAPWUte7BzTP
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';406Please respect copyright.PENANATRdBYbsuGL
}406Please respect copyright.PENANAeHt1sHrQ3l
406Please respect copyright.PENANAMXumxGUUU3
// Function to swap characters at index x and y406Please respect copyright.PENANAC8EqcmlwQo
void swap(char[] chars, int x, int y) {406Please respect copyright.PENANAt3hDk5My8i
char temp = chars[x];406Please respect copyright.PENANAxl3UQRVnQd
chars[x] = chars[y];406Please respect copyright.PENANAXZx4NhV5fo
chars[y] = temp;406Please respect copyright.PENANAhmPVyZCB95
}406Please respect copyright.PENANAS40OoocgUr
406Please respect copyright.PENANAlhetp5fjv4
public String reverseVowels(String s) {406Please respect copyright.PENANAj9FO1SvsKJ
// 設定最左的字母是[0]406Please respect copyright.PENANAz2LwKBmqUW
int start = 0;406Please respect copyright.PENANAUU3PRFkzfr
// 設定最右的字母是[文字總長度-1].406Please respect copyright.PENANAPIEyraNlB7
int end = s.length() - 1;406Please respect copyright.PENANAXzDBfjAvfi
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的406Please respect copyright.PENANA5WKMnKk17I
char[] sChar = s.toCharArray();406Please respect copyright.PENANAb5J0cimJLp
406Please respect copyright.PENANAR65BW9yLiH
// While we still have characters to traverse406Please respect copyright.PENANA6a7UXAxcdN
// while the word more than one letter, do this function406Please respect copyright.PENANAQ5xcQSpwP7
while (start < end) {406Please respect copyright.PENANA4WOHBEb8XZ
// Find the leftmost vowel406Please respect copyright.PENANAVjRxezTiU4
// while start 少於 string length() 同時 [start] 不是vowel,return start ++406Please respect copyright.PENANAbZ8H67jMsW
while (start < s.length () && !isVowel(sChar[start])) {406Please respect copyright.PENANAYRVbhHhkaA
start++;406Please respect copyright.PENANAH4Ca65uogq
}406Please respect copyright.PENANAnnoMvwLAq8
// Find the rightmost vowel406Please respect copyright.PENANA9kg21dofiv
// while end 大於 0 同時 [end] 不是vowel,return end --406Please respect copyright.PENANAVLcLCaxT4P
while (end >= 0 && !isVowel(sChar[end])) {406Please respect copyright.PENANAhP5HZvuXEq
end--;406Please respect copyright.PENANAudXmzgKvGz
}406Please respect copyright.PENANAkgWlOADh6A
// Swap them if start is left of end406Please respect copyright.PENANAkj5SKVa1hm
// swap function: (in what string, value 1, value 2), swap value 1 and 2406Please respect copyright.PENANAAAqEZk15dM
if (start < end) {406Please respect copyright.PENANAff0fk0ocJk
swap(sChar, start++, end--);406Please respect copyright.PENANApE1LfR7iBx
}406Please respect copyright.PENANAEIGe5UptBF
}406Please respect copyright.PENANAv90afJxxlW
406Please respect copyright.PENANANADT0cgteR
// Converting char array back to String406Please respect copyright.PENANA2ZeFc9lK58
// 顯示新的String406Please respect copyright.PENANAZgINduhbBr
return new String(sChar);406Please respect copyright.PENANA9HF3GYVT5q
}406Please respect copyright.PENANAN5x4Ekpfiy
};