
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.
268Please respect copyright.PENANAAioa0t0XGb
Two Pointers
class Solution {268Please respect copyright.PENANA6Qo4HUUxLK
// Return true if the character is a vowel (case-insensitive)268Please respect copyright.PENANAosjUxsrLQQ
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU268Please respect copyright.PENANA2CjUMzHUP2
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。268Please respect copyright.PENANAVoPYLgLRBf
boolean isVowel(char c) {268Please respect copyright.PENANAbGkUDmkwLC
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'268Please respect copyright.PENANAqv3gcmAxVl
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';268Please respect copyright.PENANAcoplpvH9g2
}268Please respect copyright.PENANAVvybArPj1i
268Please respect copyright.PENANAOOSKwFbXoo
// Function to swap characters at index x and y268Please respect copyright.PENANAZWM8AzoIG6
void swap(char[] chars, int x, int y) {268Please respect copyright.PENANAj2p2T4Fedc
char temp = chars[x];268Please respect copyright.PENANA0gsxejciSi
chars[x] = chars[y];268Please respect copyright.PENANAHXineEGSzx
chars[y] = temp;268Please respect copyright.PENANApdRvjQN6pD
}268Please respect copyright.PENANAG3DHEhqLv4
268Please respect copyright.PENANAgjQuiEMxwa
public String reverseVowels(String s) {268Please respect copyright.PENANAZkbkDlhdlH
// 設定最左的字母是[0]268Please respect copyright.PENANA9ECceYhjiK
int start = 0;268Please respect copyright.PENANAGkkHEBAogG
// 設定最右的字母是[文字總長度-1].268Please respect copyright.PENANAwKwoRAkJ6k
int end = s.length() - 1;268Please respect copyright.PENANAQhNRW3j7xO
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的268Please respect copyright.PENANAPqOzZrLw1l
char[] sChar = s.toCharArray();268Please respect copyright.PENANAKtXfUAnGAt
268Please respect copyright.PENANAKGeniY8FGf
// While we still have characters to traverse268Please respect copyright.PENANAdsq3vqmEHy
// while the word more than one letter, do this function268Please respect copyright.PENANAy6KBqcwjmc
while (start < end) {268Please respect copyright.PENANAqrD9cy55TC
// Find the leftmost vowel268Please respect copyright.PENANAawnX01IMcd
// while start 少於 string length() 同時 [start] 不是vowel,return start ++268Please respect copyright.PENANA8mYbG0Z6Dj
while (start < s.length () && !isVowel(sChar[start])) {268Please respect copyright.PENANA5mbXnkk0zs
start++;268Please respect copyright.PENANAKRYKSvhQzr
}268Please respect copyright.PENANACbBbvKkU2M
// Find the rightmost vowel268Please respect copyright.PENANAFJJ82zasCB
// while end 大於 0 同時 [end] 不是vowel,return end --268Please respect copyright.PENANAorhXAasTyT
while (end >= 0 && !isVowel(sChar[end])) {268Please respect copyright.PENANAAB78u5b9E2
end--;268Please respect copyright.PENANAs7HZDMM38v
}268Please respect copyright.PENANA8s1E0S6sFO
// Swap them if start is left of end268Please respect copyright.PENANAbnIAVN6GSJ
// swap function: (in what string, value 1, value 2), swap value 1 and 2268Please respect copyright.PENANAXcsiw2MGsj
if (start < end) {268Please respect copyright.PENANAW6ZBaVoBH6
swap(sChar, start++, end--);268Please respect copyright.PENANAiwAHVkgt6j
}268Please respect copyright.PENANAH0nymQR8W6
}268Please respect copyright.PENANAcMUxE2iQkc
268Please respect copyright.PENANAecC9dE27Az
// Converting char array back to String268Please respect copyright.PENANAd3mp4r3EuC
// 顯示新的String268Please respect copyright.PENANAYz6OIDZTdj
return new String(sChar);268Please respect copyright.PENANAbnvTOnhjpG
}268Please respect copyright.PENANAuP1nHpcrsA
};