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.
146Please respect copyright.PENANAr1Hb3bBQZh
Two Pointers
class Solution {146Please respect copyright.PENANAQ6UljNQGl8
// Return true if the character is a vowel (case-insensitive)146Please respect copyright.PENANA7bHvhkg6CH
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU146Please respect copyright.PENANAnkuGz0Etna
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。146Please respect copyright.PENANAoudERXDpy3
boolean isVowel(char c) {146Please respect copyright.PENANAHtUD1l1uFE
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'146Please respect copyright.PENANA5wgp8XY0is
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';146Please respect copyright.PENANARExQqMZzmZ
}146Please respect copyright.PENANANEwJiK6Ag1
146Please respect copyright.PENANAdW1Ioufr6o
// Function to swap characters at index x and y146Please respect copyright.PENANAJP7FBEHpiT
void swap(char[] chars, int x, int y) {146Please respect copyright.PENANA2eGCe6kqpR
char temp = chars[x];146Please respect copyright.PENANAZmKRauLy6q
chars[x] = chars[y];146Please respect copyright.PENANAqYhLGzoK8E
chars[y] = temp;146Please respect copyright.PENANAIHGyTKIvTZ
}146Please respect copyright.PENANAlSqjr5WPZh
146Please respect copyright.PENANAX7EHCaM6Iz
public String reverseVowels(String s) {146Please respect copyright.PENANAzkXZzCBa4Z
// 設定最左的字母是[0]146Please respect copyright.PENANA8niislobGu
int start = 0;146Please respect copyright.PENANA2xdbjlshah
// 設定最右的字母是[文字總長度-1].146Please respect copyright.PENANArze98Umuuw
int end = s.length() - 1;146Please respect copyright.PENANAjJb7F7jJQz
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的146Please respect copyright.PENANAN1q2eVUT1f
char[] sChar = s.toCharArray();146Please respect copyright.PENANASfYsvV79uj
146Please respect copyright.PENANAEhuCH1gx4P
// While we still have characters to traverse146Please respect copyright.PENANAprEs8QFRo8
// while the word more than one letter, do this function146Please respect copyright.PENANAQhviyPnhvj
while (start < end) {146Please respect copyright.PENANAVbqRU0aoIb
// Find the leftmost vowel146Please respect copyright.PENANAX8x6eK2Z9j
// while start 少於 string length() 同時 [start] 不是vowel,return start ++146Please respect copyright.PENANAglVEF5K1yH
while (start < s.length () && !isVowel(sChar[start])) {146Please respect copyright.PENANArKHFhn7tzo
start++;146Please respect copyright.PENANAoDCZAYKVrx
}146Please respect copyright.PENANAS3naDTWxjy
// Find the rightmost vowel146Please respect copyright.PENANA7buhZGlOqZ
// while end 大於 0 同時 [end] 不是vowel,return end --146Please respect copyright.PENANAsX6kjo3IFC
while (end >= 0 && !isVowel(sChar[end])) {146Please respect copyright.PENANAG5zV7xVoA5
end--;146Please respect copyright.PENANAvjuZfxDiaK
}146Please respect copyright.PENANAwTzk5MGP0D
// Swap them if start is left of end146Please respect copyright.PENANA43ajZHmwNF
// swap function: (in what string, value 1, value 2), swap value 1 and 2146Please respect copyright.PENANACLf9aqQN8i
if (start < end) {146Please respect copyright.PENANAUvUsQTx5Yx
swap(sChar, start++, end--);146Please respect copyright.PENANARZ6gSYpqzd
}146Please respect copyright.PENANAKPiE85tcfD
}146Please respect copyright.PENANAnQMYyn9ugc
146Please respect copyright.PENANAlsnaZzCgDj
// Converting char array back to String146Please respect copyright.PENANA17JWeerETd
// 顯示新的String146Please respect copyright.PENANAhV9202SRP3
return new String(sChar);146Please respect copyright.PENANA4dLOOlzNOh
}146Please respect copyright.PENANAFeOZrJ2ztU
};