
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.
372Please respect copyright.PENANA7WW3pI5X6L
Two Pointers
class Solution {372Please respect copyright.PENANAGHRAC0war6
// Return true if the character is a vowel (case-insensitive)372Please respect copyright.PENANAtCiOBEU3HO
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU372Please respect copyright.PENANAFTqEFfdddW
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。372Please respect copyright.PENANAvAygvCWVOB
boolean isVowel(char c) {372Please respect copyright.PENANAlUn6IUH0A5
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'372Please respect copyright.PENANAxcKHy9XbWX
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';372Please respect copyright.PENANAghJNSfW6RU
}372Please respect copyright.PENANAW1whIcxUbF
372Please respect copyright.PENANA88Ay7p1pVr
// Function to swap characters at index x and y372Please respect copyright.PENANAs8j773Brix
void swap(char[] chars, int x, int y) {372Please respect copyright.PENANA75AwEWqiso
char temp = chars[x];372Please respect copyright.PENANAZGrQf1Xvt4
chars[x] = chars[y];372Please respect copyright.PENANAkRTptczPPg
chars[y] = temp;372Please respect copyright.PENANAFDx4YyNNPr
}372Please respect copyright.PENANArqfOqVok5t
372Please respect copyright.PENANAN3OFKvgkGN
public String reverseVowels(String s) {372Please respect copyright.PENANA8vzT7NA7VV
// 設定最左的字母是[0]372Please respect copyright.PENANAfOqZGf7fyg
int start = 0;372Please respect copyright.PENANAHAupP9l0a4
// 設定最右的字母是[文字總長度-1].372Please respect copyright.PENANA1m2LlWmwX3
int end = s.length() - 1;372Please respect copyright.PENANAgmdpHtJUqy
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的372Please respect copyright.PENANAqkPWhieecs
char[] sChar = s.toCharArray();372Please respect copyright.PENANAuwry3nJMjZ
372Please respect copyright.PENANAvFSXjBhRvl
// While we still have characters to traverse372Please respect copyright.PENANA9JFXOWIqlr
// while the word more than one letter, do this function372Please respect copyright.PENANAaFBmKOwxvi
while (start < end) {372Please respect copyright.PENANAW7RFgGOMFl
// Find the leftmost vowel372Please respect copyright.PENANAPsEBTJmXwa
// while start 少於 string length() 同時 [start] 不是vowel,return start ++372Please respect copyright.PENANAcVb2D4benj
while (start < s.length () && !isVowel(sChar[start])) {372Please respect copyright.PENANAikJc9yTrlK
start++;372Please respect copyright.PENANAHWv6E1y6Rt
}372Please respect copyright.PENANAjDiFogUxxS
// Find the rightmost vowel372Please respect copyright.PENANAuY8iOn5KhK
// while end 大於 0 同時 [end] 不是vowel,return end --372Please respect copyright.PENANAcmjPUat785
while (end >= 0 && !isVowel(sChar[end])) {372Please respect copyright.PENANAz9gD6G4R3k
end--;372Please respect copyright.PENANAFp0QhIjIGd
}372Please respect copyright.PENANA47u6Nk4ioD
// Swap them if start is left of end372Please respect copyright.PENANASIPiw6bAmc
// swap function: (in what string, value 1, value 2), swap value 1 and 2372Please respect copyright.PENANAdGk6uDnMyX
if (start < end) {372Please respect copyright.PENANA6ZZ745LXmJ
swap(sChar, start++, end--);372Please respect copyright.PENANAtDYI2J3CW9
}372Please respect copyright.PENANAusmQxXoAN8
}372Please respect copyright.PENANAzbD9XvamZL
372Please respect copyright.PENANA2IWdcZXZYf
// Converting char array back to String372Please respect copyright.PENANAymPkUmkaKC
// 顯示新的String372Please respect copyright.PENANALZGzwylvd5
return new String(sChar);372Please respect copyright.PENANA0yB54JsAFE
}372Please respect copyright.PENANA0tYSRVoKhz
};