
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.
294Please respect copyright.PENANAopbAgs0Vkg
Two Pointers
class Solution {294Please respect copyright.PENANA6BTauPMoTu
// Return true if the character is a vowel (case-insensitive)294Please respect copyright.PENANAdOPNZKFjHl
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU294Please respect copyright.PENANAN1Ylw8nkHF
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。294Please respect copyright.PENANAsQcbOw40y3
boolean isVowel(char c) {294Please respect copyright.PENANAiKrVB8HTxq
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'294Please respect copyright.PENANAuEYCy8PDhB
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';294Please respect copyright.PENANAS5FP61SvQ4
}294Please respect copyright.PENANA05BxB3QNaI
294Please respect copyright.PENANAihnF6kmaQ2
// Function to swap characters at index x and y294Please respect copyright.PENANA12xgPoVYtS
void swap(char[] chars, int x, int y) {294Please respect copyright.PENANA338u3aV6dV
char temp = chars[x];294Please respect copyright.PENANAs4FAwbJPRm
chars[x] = chars[y];294Please respect copyright.PENANAtI2X53biNY
chars[y] = temp;294Please respect copyright.PENANAdNIINsZeXI
}294Please respect copyright.PENANAqEG5Dw6LKD
294Please respect copyright.PENANA2U7CYAkifz
public String reverseVowels(String s) {294Please respect copyright.PENANAY8bc4v0rH6
// 設定最左的字母是[0]294Please respect copyright.PENANAQIYFh641oR
int start = 0;294Please respect copyright.PENANAKUXnI4seAQ
// 設定最右的字母是[文字總長度-1].294Please respect copyright.PENANAJCTid8jwWc
int end = s.length() - 1;294Please respect copyright.PENANAnFONUlBC8I
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的294Please respect copyright.PENANAyqGKDytfSw
char[] sChar = s.toCharArray();294Please respect copyright.PENANAAToOnwatyN
294Please respect copyright.PENANAcrh9eXQra7
// While we still have characters to traverse294Please respect copyright.PENANADgcyZoCHhQ
// while the word more than one letter, do this function294Please respect copyright.PENANANBzfzsV7Rt
while (start < end) {294Please respect copyright.PENANApJzuZNC3KV
// Find the leftmost vowel294Please respect copyright.PENANAKDgRqPqhoO
// while start 少於 string length() 同時 [start] 不是vowel,return start ++294Please respect copyright.PENANALt25oGdLr3
while (start < s.length () && !isVowel(sChar[start])) {294Please respect copyright.PENANAnSubWnv814
start++;294Please respect copyright.PENANAYUg9DoNiqE
}294Please respect copyright.PENANA6dKisOVAZF
// Find the rightmost vowel294Please respect copyright.PENANAaiZHOrLsHk
// while end 大於 0 同時 [end] 不是vowel,return end --294Please respect copyright.PENANAsl9s2EF3yB
while (end >= 0 && !isVowel(sChar[end])) {294Please respect copyright.PENANAmPrKWibW7I
end--;294Please respect copyright.PENANActOVNxmNvh
}294Please respect copyright.PENANAH97XVymQf7
// Swap them if start is left of end294Please respect copyright.PENANAauvfQVFok1
// swap function: (in what string, value 1, value 2), swap value 1 and 2294Please respect copyright.PENANAnhFKI4E0e1
if (start < end) {294Please respect copyright.PENANAzdY5ZretZf
swap(sChar, start++, end--);294Please respect copyright.PENANA1Bkav9JCO7
}294Please respect copyright.PENANA4C1e8PsBQH
}294Please respect copyright.PENANAlikbhE9JXJ
294Please respect copyright.PENANAlqM8HyCEmV
// Converting char array back to String294Please respect copyright.PENANAdsEpjRknSO
// 顯示新的String294Please respect copyright.PENANAPFporGAvb7
return new String(sChar);294Please respect copyright.PENANA0pnApo6yja
}294Please respect copyright.PENANAlSeBinAUTi
};