
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.
359Please respect copyright.PENANAfmKTSffLuQ
Two Pointers
class Solution {359Please respect copyright.PENANA6wYRZmblAG
// Return true if the character is a vowel (case-insensitive)359Please respect copyright.PENANAwymr4s8SkE
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU359Please respect copyright.PENANAc05ui4Vj5i
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。359Please respect copyright.PENANA0u989yJBnf
boolean isVowel(char c) {359Please respect copyright.PENANAbDsqZ6c0PN
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'359Please respect copyright.PENANAv1vSfbgOhz
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';359Please respect copyright.PENANApMacjulNDW
}359Please respect copyright.PENANARqioDUEtAT
359Please respect copyright.PENANAAEHpUucJVP
// Function to swap characters at index x and y359Please respect copyright.PENANAW8Ga2rMozF
void swap(char[] chars, int x, int y) {359Please respect copyright.PENANADqcaZADDvi
char temp = chars[x];359Please respect copyright.PENANAInBL4xJUwB
chars[x] = chars[y];359Please respect copyright.PENANA08gwJpRhQy
chars[y] = temp;359Please respect copyright.PENANABou5kOO5Lf
}359Please respect copyright.PENANAOc1TdScn2o
359Please respect copyright.PENANAueqZxrILNW
public String reverseVowels(String s) {359Please respect copyright.PENANAiO90aSJx1v
// 設定最左的字母是[0]359Please respect copyright.PENANA9KSQto0Omo
int start = 0;359Please respect copyright.PENANADxLPyf9HM4
// 設定最右的字母是[文字總長度-1].359Please respect copyright.PENANAJxb4M03EVu
int end = s.length() - 1;359Please respect copyright.PENANAoisEOm4nQK
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的359Please respect copyright.PENANAmrL5yxcHmr
char[] sChar = s.toCharArray();359Please respect copyright.PENANAnxfjJKsVX1
359Please respect copyright.PENANAPnY318LeBC
// While we still have characters to traverse359Please respect copyright.PENANAbwsGRQJ8RE
// while the word more than one letter, do this function359Please respect copyright.PENANA7jk4En2cMD
while (start < end) {359Please respect copyright.PENANA1ChnYCu3O9
// Find the leftmost vowel359Please respect copyright.PENANAeQe7TH3fOm
// while start 少於 string length() 同時 [start] 不是vowel,return start ++359Please respect copyright.PENANAVrv99xegwo
while (start < s.length () && !isVowel(sChar[start])) {359Please respect copyright.PENANAahdtVQ0o0G
start++;359Please respect copyright.PENANAdfpGoX4rfV
}359Please respect copyright.PENANAV8KG2d3Bb3
// Find the rightmost vowel359Please respect copyright.PENANAS0uKEGG3ZL
// while end 大於 0 同時 [end] 不是vowel,return end --359Please respect copyright.PENANADgoYWjj1MF
while (end >= 0 && !isVowel(sChar[end])) {359Please respect copyright.PENANACrLEFQGim5
end--;359Please respect copyright.PENANAjWXmB99oTy
}359Please respect copyright.PENANALRY1yiXmCO
// Swap them if start is left of end359Please respect copyright.PENANAumGtRFQnLB
// swap function: (in what string, value 1, value 2), swap value 1 and 2359Please respect copyright.PENANAYF6QXLevLX
if (start < end) {359Please respect copyright.PENANAeoo1JHuntU
swap(sChar, start++, end--);359Please respect copyright.PENANAdH6Sergkrq
}359Please respect copyright.PENANALDjzqMeQJH
}359Please respect copyright.PENANAwvA3kAgXmh
359Please respect copyright.PENANAcL6xA8Quug
// Converting char array back to String359Please respect copyright.PENANAFTgvxg1hec
// 顯示新的String359Please respect copyright.PENANAhrPKjtIKt1
return new String(sChar);359Please respect copyright.PENANAcl3Y2INcSF
}359Please respect copyright.PENANAkJpHGsLK6i
};