
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.PENANAe7yoPz9DDA
Two Pointers
class Solution {372Please respect copyright.PENANA8SbPAoYk3W
// Return true if the character is a vowel (case-insensitive)372Please respect copyright.PENANAsPI4wVSNl8
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU372Please respect copyright.PENANAAD5OlegNBB
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。372Please respect copyright.PENANAVQkeA0XPIt
boolean isVowel(char c) {372Please respect copyright.PENANAtSNvueFcm9
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'372Please respect copyright.PENANA1NpraSpjEx
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';372Please respect copyright.PENANAnsztkQ7BCZ
}372Please respect copyright.PENANAXK9v0gt8wv
372Please respect copyright.PENANAbCgm3OL8zv
// Function to swap characters at index x and y372Please respect copyright.PENANAHBCrgYUVY9
void swap(char[] chars, int x, int y) {372Please respect copyright.PENANAeQchKvfDks
char temp = chars[x];372Please respect copyright.PENANAZsBaP5eQmy
chars[x] = chars[y];372Please respect copyright.PENANAvAG4rZzuXM
chars[y] = temp;372Please respect copyright.PENANAux4tpNbgNx
}372Please respect copyright.PENANACT06raiegJ
372Please respect copyright.PENANA1uhectz6n4
public String reverseVowels(String s) {372Please respect copyright.PENANAdD5FQcH1o5
// 設定最左的字母是[0]372Please respect copyright.PENANAoC41p6myWL
int start = 0;372Please respect copyright.PENANAcLn4T3wsQe
// 設定最右的字母是[文字總長度-1].372Please respect copyright.PENANA5XV04g8HmH
int end = s.length() - 1;372Please respect copyright.PENANAisgmOVCU8c
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的372Please respect copyright.PENANAtlhshkzS81
char[] sChar = s.toCharArray();372Please respect copyright.PENANAzz7pGTwcES
372Please respect copyright.PENANAC76CBWcZAX
// While we still have characters to traverse372Please respect copyright.PENANAhuq1jQQuuU
// while the word more than one letter, do this function372Please respect copyright.PENANA163ozh4c4I
while (start < end) {372Please respect copyright.PENANAMTWEaUtXY3
// Find the leftmost vowel372Please respect copyright.PENANA3WFtvm6gof
// while start 少於 string length() 同時 [start] 不是vowel,return start ++372Please respect copyright.PENANAktMeedK4Cb
while (start < s.length () && !isVowel(sChar[start])) {372Please respect copyright.PENANA0OEm1lolrl
start++;372Please respect copyright.PENANAxIAj986kSn
}372Please respect copyright.PENANAjUpcwDSVCw
// Find the rightmost vowel372Please respect copyright.PENANAKbUc6OpWvs
// while end 大於 0 同時 [end] 不是vowel,return end --372Please respect copyright.PENANAzbLhDcYs9I
while (end >= 0 && !isVowel(sChar[end])) {372Please respect copyright.PENANAFkNW1GQ9mN
end--;372Please respect copyright.PENANAVZ9gKSGZ4F
}372Please respect copyright.PENANAiKNuXnpiQM
// Swap them if start is left of end372Please respect copyright.PENANA56bGJzsWBn
// swap function: (in what string, value 1, value 2), swap value 1 and 2372Please respect copyright.PENANAqaOkJKljWH
if (start < end) {372Please respect copyright.PENANAQBda6KLLXX
swap(sChar, start++, end--);372Please respect copyright.PENANACTlyZm3A8K
}372Please respect copyright.PENANAmTdUfIUGEo
}372Please respect copyright.PENANAGd7Kn2OiEk
372Please respect copyright.PENANAtvUX9Ava74
// Converting char array back to String372Please respect copyright.PENANAy1HLxkbaxk
// 顯示新的String372Please respect copyright.PENANAH1YJnAJT0D
return new String(sChar);372Please respect copyright.PENANAtxnvkaHSBz
}372Please respect copyright.PENANAoKIjuXjQ33
};