
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.
297Please respect copyright.PENANAOEjfdNhUcE
Two Pointers
class Solution {297Please respect copyright.PENANAZQzqzoJR34
// Return true if the character is a vowel (case-insensitive)297Please respect copyright.PENANAewVLexxjA4
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU297Please respect copyright.PENANAoZ6Tda0Z6F
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。297Please respect copyright.PENANAUFk0kRnJwH
boolean isVowel(char c) {297Please respect copyright.PENANAUuoV6vpFSq
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'297Please respect copyright.PENANAbf7LprdI4w
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';297Please respect copyright.PENANAEiDsKVWguo
}297Please respect copyright.PENANAZ3sMx9SsrR
297Please respect copyright.PENANA4cqDzlXdOS
// Function to swap characters at index x and y297Please respect copyright.PENANAQB8sZyna6s
void swap(char[] chars, int x, int y) {297Please respect copyright.PENANArzU4c1zb8z
char temp = chars[x];297Please respect copyright.PENANA7D9ee3R8Th
chars[x] = chars[y];297Please respect copyright.PENANAKiTIqbeIls
chars[y] = temp;297Please respect copyright.PENANACF8OJzT6vV
}297Please respect copyright.PENANAdcbyKVvUwE
297Please respect copyright.PENANAwTa700Pa4N
public String reverseVowels(String s) {297Please respect copyright.PENANAiwHlFqYuOT
// 設定最左的字母是[0]297Please respect copyright.PENANA2dRGQRtE60
int start = 0;297Please respect copyright.PENANAOeKW7aMi0C
// 設定最右的字母是[文字總長度-1].297Please respect copyright.PENANAQtcjLI9mwr
int end = s.length() - 1;297Please respect copyright.PENANAuQxMoUGxE4
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的297Please respect copyright.PENANAOcQ947l0CD
char[] sChar = s.toCharArray();297Please respect copyright.PENANA4sSqBUemJo
297Please respect copyright.PENANAt17V8TGm6A
// While we still have characters to traverse297Please respect copyright.PENANAlZ2p4xeSAs
// while the word more than one letter, do this function297Please respect copyright.PENANAmwFtkFInQy
while (start < end) {297Please respect copyright.PENANAZ0Hn8kTdMr
// Find the leftmost vowel297Please respect copyright.PENANAuzvJKkkpAX
// while start 少於 string length() 同時 [start] 不是vowel,return start ++297Please respect copyright.PENANA7ImA50czMu
while (start < s.length () && !isVowel(sChar[start])) {297Please respect copyright.PENANAznKQO2LaIE
start++;297Please respect copyright.PENANA7bvtEG5BFt
}297Please respect copyright.PENANAnjP1uXTEq9
// Find the rightmost vowel297Please respect copyright.PENANApksXDTIaYS
// while end 大於 0 同時 [end] 不是vowel,return end --297Please respect copyright.PENANAmXEnsnZYyj
while (end >= 0 && !isVowel(sChar[end])) {297Please respect copyright.PENANArmdv2jmSTK
end--;297Please respect copyright.PENANAYU3VYDJh27
}297Please respect copyright.PENANAlf7sgPkYPh
// Swap them if start is left of end297Please respect copyright.PENANAit7DM1WfR7
// swap function: (in what string, value 1, value 2), swap value 1 and 2297Please respect copyright.PENANAURdmTfPZfm
if (start < end) {297Please respect copyright.PENANAgMDXOIJcsn
swap(sChar, start++, end--);297Please respect copyright.PENANAyon5uqt8CR
}297Please respect copyright.PENANApLNCBw1kgc
}297Please respect copyright.PENANA36YRdUfNvQ
297Please respect copyright.PENANA1MtGNHud8h
// Converting char array back to String297Please respect copyright.PENANAMrOKgP5ifA
// 顯示新的String297Please respect copyright.PENANAIBb1VS3AOu
return new String(sChar);297Please respect copyright.PENANAU41E1keWOr
}297Please respect copyright.PENANAsU6H4Wr9Nv
};