
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.
345Please respect copyright.PENANAt7foe1eIIt
Two Pointers
class Solution {345Please respect copyright.PENANAacdwvfEhh5
// Return true if the character is a vowel (case-insensitive)345Please respect copyright.PENANARHDNIsNDpV
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU345Please respect copyright.PENANA8wz4fw5nGd
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。345Please respect copyright.PENANAuItVAD5jz4
boolean isVowel(char c) {345Please respect copyright.PENANADegmLd57H4
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'345Please respect copyright.PENANAhfyq8kqUZw
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';345Please respect copyright.PENANA75u2glrjsA
}345Please respect copyright.PENANASsL9L27jYJ
345Please respect copyright.PENANAbofTsL5IgE
// Function to swap characters at index x and y345Please respect copyright.PENANASUNw2HiCwa
void swap(char[] chars, int x, int y) {345Please respect copyright.PENANAjSIB49BUMp
char temp = chars[x];345Please respect copyright.PENANAgkxroFcMWf
chars[x] = chars[y];345Please respect copyright.PENANAFFvXrz5XWd
chars[y] = temp;345Please respect copyright.PENANARKRMxBVllw
}345Please respect copyright.PENANAQLaY1q3Z1L
345Please respect copyright.PENANAz2bM96xa0O
public String reverseVowels(String s) {345Please respect copyright.PENANA7vyWS8RzYg
// 設定最左的字母是[0]345Please respect copyright.PENANA9WRvK8hmnI
int start = 0;345Please respect copyright.PENANAfYmKq7eOt8
// 設定最右的字母是[文字總長度-1].345Please respect copyright.PENANAGo7NT6A0NH
int end = s.length() - 1;345Please respect copyright.PENANA6E1LgJyxMq
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的345Please respect copyright.PENANAvwxEAiG5aB
char[] sChar = s.toCharArray();345Please respect copyright.PENANAiGKgbYKSqd
345Please respect copyright.PENANANGUxbxioir
// While we still have characters to traverse345Please respect copyright.PENANANXcVPIhl4y
// while the word more than one letter, do this function345Please respect copyright.PENANApVAPljovgR
while (start < end) {345Please respect copyright.PENANAJWt5wVRWaC
// Find the leftmost vowel345Please respect copyright.PENANAwLnpY3nqnF
// while start 少於 string length() 同時 [start] 不是vowel,return start ++345Please respect copyright.PENANAdjQaQAxbLO
while (start < s.length () && !isVowel(sChar[start])) {345Please respect copyright.PENANAN2lrlXxrtL
start++;345Please respect copyright.PENANAwT7qHeJsZC
}345Please respect copyright.PENANAvLPrdDJSku
// Find the rightmost vowel345Please respect copyright.PENANAMknsnCYybK
// while end 大於 0 同時 [end] 不是vowel,return end --345Please respect copyright.PENANAfzUdNO3Jje
while (end >= 0 && !isVowel(sChar[end])) {345Please respect copyright.PENANAd0tKcBFGhx
end--;345Please respect copyright.PENANAattaXSr37V
}345Please respect copyright.PENANADDVFeT9gZd
// Swap them if start is left of end345Please respect copyright.PENANAV6IWEagMgr
// swap function: (in what string, value 1, value 2), swap value 1 and 2345Please respect copyright.PENANACWtVKYvGr6
if (start < end) {345Please respect copyright.PENANAB4qbLriyH6
swap(sChar, start++, end--);345Please respect copyright.PENANAHNPNt32I5k
}345Please respect copyright.PENANAhhC4aL5J9P
}345Please respect copyright.PENANAj69BWCEIS8
345Please respect copyright.PENANAlG5Bdn8eoi
// Converting char array back to String345Please respect copyright.PENANAWbQTwCGkWN
// 顯示新的String345Please respect copyright.PENANADJ0N61NqQu
return new String(sChar);345Please respect copyright.PENANA0VcQlnzGKK
}345Please respect copyright.PENANAV3DSd4OfEr
};