
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.
272Please respect copyright.PENANAKqVxaPY6Zu
Two Pointers
class Solution {272Please respect copyright.PENANAhEvqTDoUCq
// Return true if the character is a vowel (case-insensitive)272Please respect copyright.PENANAOnMUhevA8U
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU272Please respect copyright.PENANA2kMKLBp8K0
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。272Please respect copyright.PENANACV9D8yurII
boolean isVowel(char c) {272Please respect copyright.PENANAnJQxsoio52
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'272Please respect copyright.PENANAuZyBR7UrNz
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';272Please respect copyright.PENANA2KIPo8hlQt
}272Please respect copyright.PENANAnUQb5zHQFR
272Please respect copyright.PENANAhTcFp0ehVG
// Function to swap characters at index x and y272Please respect copyright.PENANA26kN3FIJf4
void swap(char[] chars, int x, int y) {272Please respect copyright.PENANAy3wcJmvxpH
char temp = chars[x];272Please respect copyright.PENANAHM5inmuYrW
chars[x] = chars[y];272Please respect copyright.PENANAMVar5yLora
chars[y] = temp;272Please respect copyright.PENANAANAXBTTyes
}272Please respect copyright.PENANAz6k9l2EcIF
272Please respect copyright.PENANAKqKxjqmAx9
public String reverseVowels(String s) {272Please respect copyright.PENANAW0rbdrr3cM
// 設定最左的字母是[0]272Please respect copyright.PENANAmeBDGV073J
int start = 0;272Please respect copyright.PENANAmKzWjdUOiH
// 設定最右的字母是[文字總長度-1].272Please respect copyright.PENANAEz1qBaSDax
int end = s.length() - 1;272Please respect copyright.PENANAg4SMbAisrA
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的272Please respect copyright.PENANAlPdQFtK3tI
char[] sChar = s.toCharArray();272Please respect copyright.PENANAnMnNDbrK39
272Please respect copyright.PENANAAbr0syWVCU
// While we still have characters to traverse272Please respect copyright.PENANANg4xdD3dFG
// while the word more than one letter, do this function272Please respect copyright.PENANANh03S5oJ0i
while (start < end) {272Please respect copyright.PENANA5uSAsmmG1p
// Find the leftmost vowel272Please respect copyright.PENANAnTQHbxxR8M
// while start 少於 string length() 同時 [start] 不是vowel,return start ++272Please respect copyright.PENANATYEohlyOVg
while (start < s.length () && !isVowel(sChar[start])) {272Please respect copyright.PENANA0CRxs2v5jG
start++;272Please respect copyright.PENANAuNW38sgSeY
}272Please respect copyright.PENANAvy07D9DEse
// Find the rightmost vowel272Please respect copyright.PENANAjBzxjgcVqf
// while end 大於 0 同時 [end] 不是vowel,return end --272Please respect copyright.PENANA8Fdk6gzGSy
while (end >= 0 && !isVowel(sChar[end])) {272Please respect copyright.PENANAUSHCrvABnl
end--;272Please respect copyright.PENANAsa1VkFsM0u
}272Please respect copyright.PENANAJI1F9jJgmt
// Swap them if start is left of end272Please respect copyright.PENANAWBm2AqE5rR
// swap function: (in what string, value 1, value 2), swap value 1 and 2272Please respect copyright.PENANAZ7XuKLCZq1
if (start < end) {272Please respect copyright.PENANAfJxzlhCSdA
swap(sChar, start++, end--);272Please respect copyright.PENANAFx6vew8DIS
}272Please respect copyright.PENANAMBkE8vPuqa
}272Please respect copyright.PENANAArxgU3kGX4
272Please respect copyright.PENANAfMQ7Ol6FGQ
// Converting char array back to String272Please respect copyright.PENANAWspiyLnrd8
// 顯示新的String272Please respect copyright.PENANAiNYCk8WKMT
return new String(sChar);272Please respect copyright.PENANAzn9y74Aq5m
}272Please respect copyright.PENANA5ZdlBqkvN1
};