
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.
273Please respect copyright.PENANACs88fsrUwl
Two Pointers
class Solution {273Please respect copyright.PENANAQfx3Vf1H4X
// Return true if the character is a vowel (case-insensitive)273Please respect copyright.PENANAf6W0e9QdI1
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU273Please respect copyright.PENANAHQ0HuoYAxC
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。273Please respect copyright.PENANAEUb49xk07x
boolean isVowel(char c) {273Please respect copyright.PENANAZSdlTT4n4I
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'273Please respect copyright.PENANAyRjzQ7C9jA
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';273Please respect copyright.PENANAqbFeGM7O6y
}273Please respect copyright.PENANAULyo15hdHF
273Please respect copyright.PENANASTF5VYGfzN
// Function to swap characters at index x and y273Please respect copyright.PENANALb0m9HRgOr
void swap(char[] chars, int x, int y) {273Please respect copyright.PENANALb0iyHVj2a
char temp = chars[x];273Please respect copyright.PENANAsVdgC9HNlU
chars[x] = chars[y];273Please respect copyright.PENANAQIREXDHJn5
chars[y] = temp;273Please respect copyright.PENANAhcLJPo9Ai7
}273Please respect copyright.PENANAcQTc9fZIQJ
273Please respect copyright.PENANAel34ZNTYNL
public String reverseVowels(String s) {273Please respect copyright.PENANAXyQLOpKbcs
// 設定最左的字母是[0]273Please respect copyright.PENANARFgeVQU5qw
int start = 0;273Please respect copyright.PENANAKitje4Ts38
// 設定最右的字母是[文字總長度-1].273Please respect copyright.PENANAhOMjnVGjut
int end = s.length() - 1;273Please respect copyright.PENANAgePNgsKsnH
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的273Please respect copyright.PENANAxc6KsEDZ5I
char[] sChar = s.toCharArray();273Please respect copyright.PENANAAekWmDrdIW
273Please respect copyright.PENANA4giFpwSy8X
// While we still have characters to traverse273Please respect copyright.PENANAUQ6zyA486U
// while the word more than one letter, do this function273Please respect copyright.PENANAS29filjBKI
while (start < end) {273Please respect copyright.PENANAfOXV3nwO22
// Find the leftmost vowel273Please respect copyright.PENANAIPVVBMmxzu
// while start 少於 string length() 同時 [start] 不是vowel,return start ++273Please respect copyright.PENANA9OSUpBSJqP
while (start < s.length () && !isVowel(sChar[start])) {273Please respect copyright.PENANAERer5n1tCw
start++;273Please respect copyright.PENANAo1W860nqb1
}273Please respect copyright.PENANA8cIBM3VnQu
// Find the rightmost vowel273Please respect copyright.PENANAwQS2p1XXqs
// while end 大於 0 同時 [end] 不是vowel,return end --273Please respect copyright.PENANAdHS0Ru3RxD
while (end >= 0 && !isVowel(sChar[end])) {273Please respect copyright.PENANA5jVxJdUlhf
end--;273Please respect copyright.PENANApT3tgI5eAA
}273Please respect copyright.PENANAhBwtBF1IYY
// Swap them if start is left of end273Please respect copyright.PENANAMpPbTNEUH4
// swap function: (in what string, value 1, value 2), swap value 1 and 2273Please respect copyright.PENANAYTw3rTR0Oz
if (start < end) {273Please respect copyright.PENANAYDQHKtRP9A
swap(sChar, start++, end--);273Please respect copyright.PENANAO8GtvSoNW6
}273Please respect copyright.PENANAfXFz3lc6y6
}273Please respect copyright.PENANA7cy2mosfGa
273Please respect copyright.PENANA2BYJoXaBG4
// Converting char array back to String273Please respect copyright.PENANAIbfFSRktJu
// 顯示新的String273Please respect copyright.PENANA9BmpEwRUfz
return new String(sChar);273Please respect copyright.PENANAZahqyRedWv
}273Please respect copyright.PENANAnNr4rjDOXB
};