
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.
402Please respect copyright.PENANADPZ9gUINlS
Two Pointers
class Solution {402Please respect copyright.PENANAGuB9DsWWsw
// Return true if the character is a vowel (case-insensitive)402Please respect copyright.PENANAny8puuwS2S
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU402Please respect copyright.PENANAnaIAHfqYxn
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。402Please respect copyright.PENANAGqPwuEOMym
boolean isVowel(char c) {402Please respect copyright.PENANAyso7Vf0fBu
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'402Please respect copyright.PENANABQPVrGr3E9
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';402Please respect copyright.PENANAhr8Y7iKa6y
}402Please respect copyright.PENANAOJ8Ydjoswr
402Please respect copyright.PENANAEfXAjlGd7i
// Function to swap characters at index x and y402Please respect copyright.PENANAeR17V1oT5e
void swap(char[] chars, int x, int y) {402Please respect copyright.PENANAjhClf6fLad
char temp = chars[x];402Please respect copyright.PENANA4FOWIxsjIt
chars[x] = chars[y];402Please respect copyright.PENANAfVrTVinn5J
chars[y] = temp;402Please respect copyright.PENANAH0IQ8VsrTs
}402Please respect copyright.PENANAR2lcVsZ7m7
402Please respect copyright.PENANAsLomRn27iD
public String reverseVowels(String s) {402Please respect copyright.PENANAq8kA0j8Nq7
// 設定最左的字母是[0]402Please respect copyright.PENANAt3769SqSwA
int start = 0;402Please respect copyright.PENANAcAd8uCcncm
// 設定最右的字母是[文字總長度-1].402Please respect copyright.PENANABfJL67BF5I
int end = s.length() - 1;402Please respect copyright.PENANAqzjsLFkJZD
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的402Please respect copyright.PENANAaJINu9qsM5
char[] sChar = s.toCharArray();402Please respect copyright.PENANAAxCz2Fa64s
402Please respect copyright.PENANAdQT4vejopf
// While we still have characters to traverse402Please respect copyright.PENANAs5VTLcTqAJ
// while the word more than one letter, do this function402Please respect copyright.PENANAzmAQsKiLXx
while (start < end) {402Please respect copyright.PENANAEw6LpqdKL4
// Find the leftmost vowel402Please respect copyright.PENANAMO6XVwKX7T
// while start 少於 string length() 同時 [start] 不是vowel,return start ++402Please respect copyright.PENANA9RrnMvmcpz
while (start < s.length () && !isVowel(sChar[start])) {402Please respect copyright.PENANACsXd66w5M6
start++;402Please respect copyright.PENANAdcL7MIIwN8
}402Please respect copyright.PENANAmtND6bPEYG
// Find the rightmost vowel402Please respect copyright.PENANAiRmKXTsgxm
// while end 大於 0 同時 [end] 不是vowel,return end --402Please respect copyright.PENANAtmRohXFtck
while (end >= 0 && !isVowel(sChar[end])) {402Please respect copyright.PENANADCFSQ1Y6YO
end--;402Please respect copyright.PENANAtyeRAYZBYg
}402Please respect copyright.PENANAX4RVlRzci3
// Swap them if start is left of end402Please respect copyright.PENANAOGPW9ksIdN
// swap function: (in what string, value 1, value 2), swap value 1 and 2402Please respect copyright.PENANACHhpbNU1fq
if (start < end) {402Please respect copyright.PENANAV47Qm39jko
swap(sChar, start++, end--);402Please respect copyright.PENANApSVZ1Sdwvs
}402Please respect copyright.PENANAmo8Grs6dXE
}402Please respect copyright.PENANAMIAdLjWdTj
402Please respect copyright.PENANAWE9yOjk8SA
// Converting char array back to String402Please respect copyright.PENANAFraZ1ldXc1
// 顯示新的String402Please respect copyright.PENANA3h0B3Npkut
return new String(sChar);402Please respect copyright.PENANAKdXk4J0rYI
}402Please respect copyright.PENANAmAU6Ugvy7E
};