
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.
333Please respect copyright.PENANAOXNxApuvOQ
Two Pointers
class Solution {333Please respect copyright.PENANAUs3Zs67osG
// Return true if the character is a vowel (case-insensitive)333Please respect copyright.PENANAuDEDWbjJBF
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU333Please respect copyright.PENANAAIu0OzyGqb
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。333Please respect copyright.PENANASFB03itUWi
boolean isVowel(char c) {333Please respect copyright.PENANAJYcv9i4AQY
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'333Please respect copyright.PENANAXOaCqIiUGf
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';333Please respect copyright.PENANAAylKON3fCQ
}333Please respect copyright.PENANAhyfJiKk0H4
333Please respect copyright.PENANAyL2XPC2D5s
// Function to swap characters at index x and y333Please respect copyright.PENANA9zBVCJn7dF
void swap(char[] chars, int x, int y) {333Please respect copyright.PENANAsaeNVnXgMw
char temp = chars[x];333Please respect copyright.PENANAbJlaqS2e9d
chars[x] = chars[y];333Please respect copyright.PENANAf6mQiIpwjV
chars[y] = temp;333Please respect copyright.PENANAXW11MozXji
}333Please respect copyright.PENANAiFiI9keONW
333Please respect copyright.PENANA8uPFd0V1Wb
public String reverseVowels(String s) {333Please respect copyright.PENANAxyllyl4DLa
// 設定最左的字母是[0]333Please respect copyright.PENANARJ91gXDKYn
int start = 0;333Please respect copyright.PENANA1qOLTVJ0WW
// 設定最右的字母是[文字總長度-1].333Please respect copyright.PENANAG9uOvcIvYp
int end = s.length() - 1;333Please respect copyright.PENANAp0HggqIA8o
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的333Please respect copyright.PENANAbWxBg06AxK
char[] sChar = s.toCharArray();333Please respect copyright.PENANAAnPMu4Najz
333Please respect copyright.PENANA1aGoJkU5yr
// While we still have characters to traverse333Please respect copyright.PENANAQZQRMrqkjj
// while the word more than one letter, do this function333Please respect copyright.PENANAHsrodZyq2E
while (start < end) {333Please respect copyright.PENANAT9SNNwdePm
// Find the leftmost vowel333Please respect copyright.PENANAuth5KDufSg
// while start 少於 string length() 同時 [start] 不是vowel,return start ++333Please respect copyright.PENANAsTfERezASW
while (start < s.length () && !isVowel(sChar[start])) {333Please respect copyright.PENANAu3sCXiqWNw
start++;333Please respect copyright.PENANA0jPAJTTytN
}333Please respect copyright.PENANACK0UXM7UzS
// Find the rightmost vowel333Please respect copyright.PENANA89ldxppZ8r
// while end 大於 0 同時 [end] 不是vowel,return end --333Please respect copyright.PENANAemwsO4TsFC
while (end >= 0 && !isVowel(sChar[end])) {333Please respect copyright.PENANAtgWWQR6zLf
end--;333Please respect copyright.PENANAYjYP6Gi0Mh
}333Please respect copyright.PENANAhB2iiWHL8O
// Swap them if start is left of end333Please respect copyright.PENANAXdbDPzJ72v
// swap function: (in what string, value 1, value 2), swap value 1 and 2333Please respect copyright.PENANAWqz4nFNTYZ
if (start < end) {333Please respect copyright.PENANA7wKWu69n9F
swap(sChar, start++, end--);333Please respect copyright.PENANAUsUQouFADV
}333Please respect copyright.PENANAMUJA7koFbx
}333Please respect copyright.PENANAlUQkODKNhr
333Please respect copyright.PENANA0aJ8Re89t8
// Converting char array back to String333Please respect copyright.PENANAsoOtcvbHEi
// 顯示新的String333Please respect copyright.PENANA7Yi60EzYll
return new String(sChar);333Please respect copyright.PENANARQrlwFN5ME
}333Please respect copyright.PENANAuqKM1bt4G4
};