
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.
288Please respect copyright.PENANAw4L8SUkepx
Two Pointers
class Solution {288Please respect copyright.PENANA015u1an9Ul
// Return true if the character is a vowel (case-insensitive)288Please respect copyright.PENANAzJpKHjhEiQ
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU288Please respect copyright.PENANANRg53lxSmw
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。288Please respect copyright.PENANANkysxcvYa3
boolean isVowel(char c) {288Please respect copyright.PENANA264XGVwlPD
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'288Please respect copyright.PENANA7lBPTB7jD7
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';288Please respect copyright.PENANAv15miDC866
}288Please respect copyright.PENANAoFWMA5qVMx
288Please respect copyright.PENANAIE1kBZsyV9
// Function to swap characters at index x and y288Please respect copyright.PENANAP389EJaYQu
void swap(char[] chars, int x, int y) {288Please respect copyright.PENANAcYmh97oLo3
char temp = chars[x];288Please respect copyright.PENANA5hyYISNEuo
chars[x] = chars[y];288Please respect copyright.PENANADQjzLUEHCL
chars[y] = temp;288Please respect copyright.PENANACPY42kvX9G
}288Please respect copyright.PENANAjXFiLqOVx8
288Please respect copyright.PENANAvF8gRsfFa4
public String reverseVowels(String s) {288Please respect copyright.PENANAKCqF4tg3mz
// 設定最左的字母是[0]288Please respect copyright.PENANAVBmqRkw0ng
int start = 0;288Please respect copyright.PENANAk6nUsYChDB
// 設定最右的字母是[文字總長度-1].288Please respect copyright.PENANAcciF6phQA2
int end = s.length() - 1;288Please respect copyright.PENANAFazXCFaNGG
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的288Please respect copyright.PENANAhJQ3woEHI9
char[] sChar = s.toCharArray();288Please respect copyright.PENANA384zI6yjTh
288Please respect copyright.PENANAsn4wjY0CwX
// While we still have characters to traverse288Please respect copyright.PENANAHD5W8w0BWH
// while the word more than one letter, do this function288Please respect copyright.PENANA8cl3aocsW1
while (start < end) {288Please respect copyright.PENANA3WFEgAYJxO
// Find the leftmost vowel288Please respect copyright.PENANAv5RfC2ExBt
// while start 少於 string length() 同時 [start] 不是vowel,return start ++288Please respect copyright.PENANACv3JCcufPz
while (start < s.length () && !isVowel(sChar[start])) {288Please respect copyright.PENANAjhCeGtn7zS
start++;288Please respect copyright.PENANA2V5vWUf5NR
}288Please respect copyright.PENANA9mAUEW0SJd
// Find the rightmost vowel288Please respect copyright.PENANA5mLwECZf4S
// while end 大於 0 同時 [end] 不是vowel,return end --288Please respect copyright.PENANA5O6AyWsqmT
while (end >= 0 && !isVowel(sChar[end])) {288Please respect copyright.PENANAGN7pejhz9F
end--;288Please respect copyright.PENANAOUkYYcD9Q8
}288Please respect copyright.PENANAaQ4vcW7qZ2
// Swap them if start is left of end288Please respect copyright.PENANA2JBSnPB60J
// swap function: (in what string, value 1, value 2), swap value 1 and 2288Please respect copyright.PENANAlbc7S1HXnp
if (start < end) {288Please respect copyright.PENANARHRgvtfn6d
swap(sChar, start++, end--);288Please respect copyright.PENANAGgB5xu8a9W
}288Please respect copyright.PENANA9Y5Lsle95d
}288Please respect copyright.PENANAtsD6lHAiNc
288Please respect copyright.PENANAnv4vHAiwDZ
// Converting char array back to String288Please respect copyright.PENANAt1LjdEHzO4
// 顯示新的String288Please respect copyright.PENANA4sspR6zsVq
return new String(sChar);288Please respect copyright.PENANAyxZXbJym0i
}288Please respect copyright.PENANAmCwQgUQXkP
};