
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.
365Please respect copyright.PENANAzaHjOknN2D
Two Pointers
class Solution {365Please respect copyright.PENANAD40nXVaut2
// Return true if the character is a vowel (case-insensitive)365Please respect copyright.PENANAlhDI6JtDjG
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU365Please respect copyright.PENANAx8eUtSOVOm
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。365Please respect copyright.PENANAFkBjrX5ITU
boolean isVowel(char c) {365Please respect copyright.PENANATBujTaFuiE
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'365Please respect copyright.PENANAVm3CH1odyW
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';365Please respect copyright.PENANATiDnGqlSiX
}365Please respect copyright.PENANA7hsYPu2zOP
365Please respect copyright.PENANAbncxQrssWL
// Function to swap characters at index x and y365Please respect copyright.PENANAZNl6iGNWqP
void swap(char[] chars, int x, int y) {365Please respect copyright.PENANApw0CeTa7fI
char temp = chars[x];365Please respect copyright.PENANANpAIHzFnvX
chars[x] = chars[y];365Please respect copyright.PENANADuGlFqAOmd
chars[y] = temp;365Please respect copyright.PENANAdrBCwsPfaj
}365Please respect copyright.PENANAKXRnGmTXQs
365Please respect copyright.PENANAqCfmsm82hJ
public String reverseVowels(String s) {365Please respect copyright.PENANABgSV2tuawx
// 設定最左的字母是[0]365Please respect copyright.PENANAjsLteS0Mke
int start = 0;365Please respect copyright.PENANAD2PwMyVog3
// 設定最右的字母是[文字總長度-1].365Please respect copyright.PENANAKp77rnFBN4
int end = s.length() - 1;365Please respect copyright.PENANAt8qt2SQSav
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的365Please respect copyright.PENANAYsFQMO1I8i
char[] sChar = s.toCharArray();365Please respect copyright.PENANA1zsoJsxMOx
365Please respect copyright.PENANAkBH5IT0Euj
// While we still have characters to traverse365Please respect copyright.PENANAeRgqYg3hBV
// while the word more than one letter, do this function365Please respect copyright.PENANAasUkrIEp7G
while (start < end) {365Please respect copyright.PENANAVdjJHWzetA
// Find the leftmost vowel365Please respect copyright.PENANAG86uVFHHza
// while start 少於 string length() 同時 [start] 不是vowel,return start ++365Please respect copyright.PENANA3bW8Dbx3Yj
while (start < s.length () && !isVowel(sChar[start])) {365Please respect copyright.PENANANoldUPgyf4
start++;365Please respect copyright.PENANALyEN551AFB
}365Please respect copyright.PENANAfKPxoLxtwT
// Find the rightmost vowel365Please respect copyright.PENANAArJiQ4vv7C
// while end 大於 0 同時 [end] 不是vowel,return end --365Please respect copyright.PENANA2ZvHyZTWOE
while (end >= 0 && !isVowel(sChar[end])) {365Please respect copyright.PENANAFBcwWb7VkX
end--;365Please respect copyright.PENANAljbxcDjXEM
}365Please respect copyright.PENANAs5htfk2Zqb
// Swap them if start is left of end365Please respect copyright.PENANAV44cGrNUGE
// swap function: (in what string, value 1, value 2), swap value 1 and 2365Please respect copyright.PENANADBUIsiemVm
if (start < end) {365Please respect copyright.PENANAxY4NNs2OJO
swap(sChar, start++, end--);365Please respect copyright.PENANA5Cvy6RN5Pz
}365Please respect copyright.PENANAXWv3NXcw3E
}365Please respect copyright.PENANAigVs5ya3Gz
365Please respect copyright.PENANA6LHyqCz555
// Converting char array back to String365Please respect copyright.PENANA16BjdlXdRo
// 顯示新的String365Please respect copyright.PENANAWPWLoblVW2
return new String(sChar);365Please respect copyright.PENANADQgUxpDUlO
}365Please respect copyright.PENANAjyRVuh6Q2i
};