
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.
335Please respect copyright.PENANAW0wSJxOTt6
Two Pointers
class Solution {335Please respect copyright.PENANA61nKK1Rnyg
// Return true if the character is a vowel (case-insensitive)335Please respect copyright.PENANAAoHzcydkvS
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU335Please respect copyright.PENANAolrQBOPnT5
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。335Please respect copyright.PENANAjBxACQrTyn
boolean isVowel(char c) {335Please respect copyright.PENANA1Rny7AU1xs
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'335Please respect copyright.PENANADSn2rsIDbm
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';335Please respect copyright.PENANAraLKLU32Di
}335Please respect copyright.PENANAyMksi1Ufg3
335Please respect copyright.PENANAhkHcjyj6jx
// Function to swap characters at index x and y335Please respect copyright.PENANAjCJFoLkBCU
void swap(char[] chars, int x, int y) {335Please respect copyright.PENANAdl8IKZREjd
char temp = chars[x];335Please respect copyright.PENANA9qQsc70pAs
chars[x] = chars[y];335Please respect copyright.PENANA63lYDl0pfr
chars[y] = temp;335Please respect copyright.PENANA6B5zNYyhRJ
}335Please respect copyright.PENANAGkSyrR94Hh
335Please respect copyright.PENANAahMeiaQQGm
public String reverseVowels(String s) {335Please respect copyright.PENANAzVeNX47VFe
// 設定最左的字母是[0]335Please respect copyright.PENANAul2rXj7MIC
int start = 0;335Please respect copyright.PENANAEQOLa28rMM
// 設定最右的字母是[文字總長度-1].335Please respect copyright.PENANAjg1aeQYr3m
int end = s.length() - 1;335Please respect copyright.PENANAemy6Ou8WWu
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的335Please respect copyright.PENANAjf4zozZJNV
char[] sChar = s.toCharArray();335Please respect copyright.PENANACX92mgWki2
335Please respect copyright.PENANAaaNSlJQIIM
// While we still have characters to traverse335Please respect copyright.PENANAAay7cxVkPJ
// while the word more than one letter, do this function335Please respect copyright.PENANA5mzQvYLgxB
while (start < end) {335Please respect copyright.PENANA2JmISWdkID
// Find the leftmost vowel335Please respect copyright.PENANAqAJFIjbZm4
// while start 少於 string length() 同時 [start] 不是vowel,return start ++335Please respect copyright.PENANADVW29Q221f
while (start < s.length () && !isVowel(sChar[start])) {335Please respect copyright.PENANAROGvV0OxVb
start++;335Please respect copyright.PENANAwR5UdBsFV3
}335Please respect copyright.PENANA8J7JFjAJKJ
// Find the rightmost vowel335Please respect copyright.PENANAFBrMCi7F5s
// while end 大於 0 同時 [end] 不是vowel,return end --335Please respect copyright.PENANAu8zUMNQU3y
while (end >= 0 && !isVowel(sChar[end])) {335Please respect copyright.PENANA5XM913EQUw
end--;335Please respect copyright.PENANAMu2UgaMbdy
}335Please respect copyright.PENANA759jSnDCby
// Swap them if start is left of end335Please respect copyright.PENANAqILpfPA8Kj
// swap function: (in what string, value 1, value 2), swap value 1 and 2335Please respect copyright.PENANAwQEMtxCBTz
if (start < end) {335Please respect copyright.PENANAdyrvtrHIFh
swap(sChar, start++, end--);335Please respect copyright.PENANAhK8XFgXPZ9
}335Please respect copyright.PENANAet2VJwsO2F
}335Please respect copyright.PENANAgjvrwnHxzg
335Please respect copyright.PENANA5DxYoE2lUC
// Converting char array back to String335Please respect copyright.PENANAYYHHyjO0Nb
// 顯示新的String335Please respect copyright.PENANA8JMaHpOqwd
return new String(sChar);335Please respect copyright.PENANALVSo5Dntc2
}335Please respect copyright.PENANAewGciQJx58
};