
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.PENANASlXy5kJI63
Two Pointers
class Solution {372Please respect copyright.PENANAF9iuXjY0Pc
// Return true if the character is a vowel (case-insensitive)372Please respect copyright.PENANAlt0C1gQrgb
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU372Please respect copyright.PENANACOph44jQEl
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。372Please respect copyright.PENANAwbpdd6cIZp
boolean isVowel(char c) {372Please respect copyright.PENANA2iQ0Pq9Ce7
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'372Please respect copyright.PENANAvyfornHH4B
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';372Please respect copyright.PENANAWn4KZnb3qe
}372Please respect copyright.PENANAxQWLnqnO1v
372Please respect copyright.PENANAouyirmOzJ9
// Function to swap characters at index x and y372Please respect copyright.PENANAuBdfTlisnL
void swap(char[] chars, int x, int y) {372Please respect copyright.PENANAnvAhbszAVc
char temp = chars[x];372Please respect copyright.PENANAn4N76mRLqJ
chars[x] = chars[y];372Please respect copyright.PENANAZK1ArURR85
chars[y] = temp;372Please respect copyright.PENANAs6l13l4tn1
}372Please respect copyright.PENANAG5f8Y7VBki
372Please respect copyright.PENANA2R3tlQG5dn
public String reverseVowels(String s) {372Please respect copyright.PENANAkhdNB3QbpG
// 設定最左的字母是[0]372Please respect copyright.PENANASgiwXUNQBK
int start = 0;372Please respect copyright.PENANAq37abK2gmY
// 設定最右的字母是[文字總長度-1].372Please respect copyright.PENANAUxT5rGEuZP
int end = s.length() - 1;372Please respect copyright.PENANADx95nlEqFG
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的372Please respect copyright.PENANAPae0YFIYXW
char[] sChar = s.toCharArray();372Please respect copyright.PENANAxF6lswRUsA
372Please respect copyright.PENANAoGWrICbySa
// While we still have characters to traverse372Please respect copyright.PENANAid7QBccZFa
// while the word more than one letter, do this function372Please respect copyright.PENANARNvJ2p91M2
while (start < end) {372Please respect copyright.PENANAFt6RjhZ982
// Find the leftmost vowel372Please respect copyright.PENANAc5SJKNnzgF
// while start 少於 string length() 同時 [start] 不是vowel,return start ++372Please respect copyright.PENANA44PsldlHl6
while (start < s.length () && !isVowel(sChar[start])) {372Please respect copyright.PENANAZ8fUHV0uaD
start++;372Please respect copyright.PENANAUPnngKmUfs
}372Please respect copyright.PENANAGORuHrVTgR
// Find the rightmost vowel372Please respect copyright.PENANAsR0yijfDXc
// while end 大於 0 同時 [end] 不是vowel,return end --372Please respect copyright.PENANArlErQeGsrH
while (end >= 0 && !isVowel(sChar[end])) {372Please respect copyright.PENANAnxUxMDYyT5
end--;372Please respect copyright.PENANAhu8ukgGO0U
}372Please respect copyright.PENANAc0UXCJf91d
// Swap them if start is left of end372Please respect copyright.PENANA1F7ErOcUt3
// swap function: (in what string, value 1, value 2), swap value 1 and 2372Please respect copyright.PENANA9JX1AJYNsl
if (start < end) {372Please respect copyright.PENANAkOM2V4habt
swap(sChar, start++, end--);372Please respect copyright.PENANAQbEYWIDg0j
}372Please respect copyright.PENANAHZCn2PlcNO
}372Please respect copyright.PENANAWs5JfCUmez
372Please respect copyright.PENANA4rrB6syVKC
// Converting char array back to String372Please respect copyright.PENANASLYAvB6q5d
// 顯示新的String372Please respect copyright.PENANADv4hkORc5O
return new String(sChar);372Please respect copyright.PENANAKLDHwgXNtw
}372Please respect copyright.PENANATMnkZZeOjk
};