
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.
360Please respect copyright.PENANAjuI7dNk8Ou
Two Pointers
class Solution {360Please respect copyright.PENANAHGV9jGzMye
// Return true if the character is a vowel (case-insensitive)360Please respect copyright.PENANAUG40Wg1lot
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU360Please respect copyright.PENANA7g6joCR7aT
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。360Please respect copyright.PENANANwVHEi8fTA
boolean isVowel(char c) {360Please respect copyright.PENANAYInS0ogf7p
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'360Please respect copyright.PENANAeVYfCI0thz
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';360Please respect copyright.PENANAIKE0QhFq6s
}360Please respect copyright.PENANACMkx6qyMao
360Please respect copyright.PENANA2TfR727edX
// Function to swap characters at index x and y360Please respect copyright.PENANAr6KbivIM1o
void swap(char[] chars, int x, int y) {360Please respect copyright.PENANAA4NQ923ss2
char temp = chars[x];360Please respect copyright.PENANAcuTOVojfvV
chars[x] = chars[y];360Please respect copyright.PENANA6uAKUGfp6w
chars[y] = temp;360Please respect copyright.PENANAaXrAddgwn9
}360Please respect copyright.PENANA5opZ7aCzye
360Please respect copyright.PENANAcD060OAFH5
public String reverseVowels(String s) {360Please respect copyright.PENANApG78iebnHm
// 設定最左的字母是[0]360Please respect copyright.PENANAwjmpt878Fi
int start = 0;360Please respect copyright.PENANASBmfXTyBQB
// 設定最右的字母是[文字總長度-1].360Please respect copyright.PENANALCw9uNuUJI
int end = s.length() - 1;360Please respect copyright.PENANAxFPML3B4Gy
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的360Please respect copyright.PENANAFY5ezSDG14
char[] sChar = s.toCharArray();360Please respect copyright.PENANAdBVafHLBli
360Please respect copyright.PENANAr0FnkFb2w8
// While we still have characters to traverse360Please respect copyright.PENANAvqYl28truo
// while the word more than one letter, do this function360Please respect copyright.PENANATQOgu9uJBs
while (start < end) {360Please respect copyright.PENANAsfpTRjh1Wy
// Find the leftmost vowel360Please respect copyright.PENANA3fVplAlJGh
// while start 少於 string length() 同時 [start] 不是vowel,return start ++360Please respect copyright.PENANAkSB2uYEttY
while (start < s.length () && !isVowel(sChar[start])) {360Please respect copyright.PENANAVb9kBgfJEc
start++;360Please respect copyright.PENANAM5uLvh9UXO
}360Please respect copyright.PENANAutx6o6FvKO
// Find the rightmost vowel360Please respect copyright.PENANArkpCccNO4C
// while end 大於 0 同時 [end] 不是vowel,return end --360Please respect copyright.PENANAKEr8rxmp2x
while (end >= 0 && !isVowel(sChar[end])) {360Please respect copyright.PENANAKjxasBgHJ3
end--;360Please respect copyright.PENANALdWkiqsorX
}360Please respect copyright.PENANAfVbnf3RdZP
// Swap them if start is left of end360Please respect copyright.PENANAzRS3wSLJqr
// swap function: (in what string, value 1, value 2), swap value 1 and 2360Please respect copyright.PENANAvUQevgW42n
if (start < end) {360Please respect copyright.PENANAHv1ykJl5xN
swap(sChar, start++, end--);360Please respect copyright.PENANAELClPZjhro
}360Please respect copyright.PENANAfVwo5siJIb
}360Please respect copyright.PENANA8c3Y97wJVo
360Please respect copyright.PENANAMikxwsUPlM
// Converting char array back to String360Please respect copyright.PENANAbNfBXV4aD2
// 顯示新的String360Please respect copyright.PENANAWW6HJSSxjp
return new String(sChar);360Please respect copyright.PENANAyBGENRvboT
}360Please respect copyright.PENANAnY1CqAX5W7
};