
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.
368Please respect copyright.PENANAFpmPO9UCjZ
Two Pointers
class Solution {368Please respect copyright.PENANA7ZFNs7bhle
// Return true if the character is a vowel (case-insensitive)368Please respect copyright.PENANAW8AaE6cXjN
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU368Please respect copyright.PENANAHy1DJVckaK
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。368Please respect copyright.PENANAZPaANkrAEv
boolean isVowel(char c) {368Please respect copyright.PENANApkYKGDkSp5
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'368Please respect copyright.PENANApNXwOm8OZF
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';368Please respect copyright.PENANA6uIB1fyxZk
}368Please respect copyright.PENANATS0lsrKfyy
368Please respect copyright.PENANADgfu75kseS
// Function to swap characters at index x and y368Please respect copyright.PENANAR18LM6TjPE
void swap(char[] chars, int x, int y) {368Please respect copyright.PENANAxvWKNjHcM6
char temp = chars[x];368Please respect copyright.PENANA1pKph7kwul
chars[x] = chars[y];368Please respect copyright.PENANAj5FhvYNveN
chars[y] = temp;368Please respect copyright.PENANAVHMJ7nJ5Bz
}368Please respect copyright.PENANA2jf3EQodSo
368Please respect copyright.PENANAVmxYjiQRyt
public String reverseVowels(String s) {368Please respect copyright.PENANA84gQr2VW7y
// 設定最左的字母是[0]368Please respect copyright.PENANA6LXRMceWiS
int start = 0;368Please respect copyright.PENANAX6kFtxvYWN
// 設定最右的字母是[文字總長度-1].368Please respect copyright.PENANAXoUNByNvdK
int end = s.length() - 1;368Please respect copyright.PENANA5b1NpjH6ai
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的368Please respect copyright.PENANAIu9yzUe2Ja
char[] sChar = s.toCharArray();368Please respect copyright.PENANAOTi5mNV3M4
368Please respect copyright.PENANAFZWddgqw0a
// While we still have characters to traverse368Please respect copyright.PENANAnipGvcQtVd
// while the word more than one letter, do this function368Please respect copyright.PENANAtglAG0pWW0
while (start < end) {368Please respect copyright.PENANAeqBu0avro3
// Find the leftmost vowel368Please respect copyright.PENANARqw8dXqD6x
// while start 少於 string length() 同時 [start] 不是vowel,return start ++368Please respect copyright.PENANANXmmqXHUMG
while (start < s.length () && !isVowel(sChar[start])) {368Please respect copyright.PENANAH5sm3Odx8g
start++;368Please respect copyright.PENANA6xhHKWm9FD
}368Please respect copyright.PENANAhnPXbjT1r9
// Find the rightmost vowel368Please respect copyright.PENANAEeWsGCVoHS
// while end 大於 0 同時 [end] 不是vowel,return end --368Please respect copyright.PENANACWlCDRtXPN
while (end >= 0 && !isVowel(sChar[end])) {368Please respect copyright.PENANAau578CEWnw
end--;368Please respect copyright.PENANA8evBvmw97E
}368Please respect copyright.PENANAj9QRiWCDnl
// Swap them if start is left of end368Please respect copyright.PENANADLtHiweKzS
// swap function: (in what string, value 1, value 2), swap value 1 and 2368Please respect copyright.PENANAX0B1Tv6iFt
if (start < end) {368Please respect copyright.PENANAMU0Po0MkOY
swap(sChar, start++, end--);368Please respect copyright.PENANAlyV0wf3irR
}368Please respect copyright.PENANAEHwYuYZYsi
}368Please respect copyright.PENANAqiRHIhyHBX
368Please respect copyright.PENANAOJ9YOL0vMa
// Converting char array back to String368Please respect copyright.PENANAGvdCBZiEJy
// 顯示新的String368Please respect copyright.PENANASwzmfchdVx
return new String(sChar);368Please respect copyright.PENANAegOAiRDucY
}368Please respect copyright.PENANA50xoUkOcR9
};