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.
145Please respect copyright.PENANAxsCVZCtrBG
Two Pointers
class Solution {145Please respect copyright.PENANA7T8WpTYt92
// Return true if the character is a vowel (case-insensitive)145Please respect copyright.PENANAMSobm2C4KM
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU145Please respect copyright.PENANASzrqjR2siC
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。145Please respect copyright.PENANAZPGpSo01BT
boolean isVowel(char c) {145Please respect copyright.PENANABV3Joj2Aju
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'145Please respect copyright.PENANA75NOCAIQfw
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';145Please respect copyright.PENANAG934CdfRdd
}145Please respect copyright.PENANAqbM2FSw6E8
145Please respect copyright.PENANAOPeeagqLR2
// Function to swap characters at index x and y145Please respect copyright.PENANAQllRY3isrr
void swap(char[] chars, int x, int y) {145Please respect copyright.PENANAIPq4wL721p
char temp = chars[x];145Please respect copyright.PENANAeauBpSiYpb
chars[x] = chars[y];145Please respect copyright.PENANAVmJIf9zpGk
chars[y] = temp;145Please respect copyright.PENANA7IPcCAmuPb
}145Please respect copyright.PENANAVcNPLUqG8y
145Please respect copyright.PENANAVxtizBCyY9
public String reverseVowels(String s) {145Please respect copyright.PENANAA5czzQ17ik
// 設定最左的字母是[0]145Please respect copyright.PENANAWywaYT991H
int start = 0;145Please respect copyright.PENANAgzqpQeNmq2
// 設定最右的字母是[文字總長度-1].145Please respect copyright.PENANALiH0wFEA78
int end = s.length() - 1;145Please respect copyright.PENANACu2N1X06pp
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的145Please respect copyright.PENANACJrD3FO5G6
char[] sChar = s.toCharArray();145Please respect copyright.PENANAbj9edUHznd
145Please respect copyright.PENANAkBw9jPiKB5
// While we still have characters to traverse145Please respect copyright.PENANAshZFhRhzeN
// while the word more than one letter, do this function145Please respect copyright.PENANAmz5Rj0Gpxa
while (start < end) {145Please respect copyright.PENANA2RE16tR4M3
// Find the leftmost vowel145Please respect copyright.PENANAtXsUXJGSuL
// while start 少於 string length() 同時 [start] 不是vowel,return start ++145Please respect copyright.PENANAcTju4fKVIs
while (start < s.length () && !isVowel(sChar[start])) {145Please respect copyright.PENANAhnfWtt4c4h
start++;145Please respect copyright.PENANAJczc4jpStn
}145Please respect copyright.PENANA7UycUggOKP
// Find the rightmost vowel145Please respect copyright.PENANABtAqjdn7uZ
// while end 大於 0 同時 [end] 不是vowel,return end --145Please respect copyright.PENANA2KkByimagT
while (end >= 0 && !isVowel(sChar[end])) {145Please respect copyright.PENANAyn06W2EEZQ
end--;145Please respect copyright.PENANAcunycr8DXq
}145Please respect copyright.PENANAIW27SmkNXs
// Swap them if start is left of end145Please respect copyright.PENANA8YAtQ9DA1f
// swap function: (in what string, value 1, value 2), swap value 1 and 2145Please respect copyright.PENANADTi3sG3T75
if (start < end) {145Please respect copyright.PENANAbLjK1TFKAo
swap(sChar, start++, end--);145Please respect copyright.PENANAS7ZR2OFbtw
}145Please respect copyright.PENANAIbe58hY1fX
}145Please respect copyright.PENANA8qVV8m4zdr
145Please respect copyright.PENANAI4OgZUnfiW
// Converting char array back to String145Please respect copyright.PENANAeXwGjfGJ1v
// 顯示新的String145Please respect copyright.PENANAPxZSYwJ3G8
return new String(sChar);145Please respect copyright.PENANA3dFFytPa7A
}145Please respect copyright.PENANAt5OWSohInV
};