
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.
348Please respect copyright.PENANAcfKVbu8KFV
Two Pointers
class Solution {348Please respect copyright.PENANAQHmE9bVdV1
// Return true if the character is a vowel (case-insensitive)348Please respect copyright.PENANAG7ekG7oy1L
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU348Please respect copyright.PENANAh3JgeCSz2I
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。348Please respect copyright.PENANAcd502xXM3W
boolean isVowel(char c) {348Please respect copyright.PENANAqRYSQtjLtm
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'348Please respect copyright.PENANAvBhYppaKdY
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';348Please respect copyright.PENANAtZSQCTGgwE
}348Please respect copyright.PENANAlTHpkbEZmr
348Please respect copyright.PENANAhTGdZWXeeB
// Function to swap characters at index x and y348Please respect copyright.PENANAaptTH2DoEW
void swap(char[] chars, int x, int y) {348Please respect copyright.PENANAOnDheeQ3AR
char temp = chars[x];348Please respect copyright.PENANAuOCZEFTCTi
chars[x] = chars[y];348Please respect copyright.PENANAfY2HpnnwFK
chars[y] = temp;348Please respect copyright.PENANAEir9pyx9hI
}348Please respect copyright.PENANAgup6fZV038
348Please respect copyright.PENANAzbfVh4cVvk
public String reverseVowels(String s) {348Please respect copyright.PENANAQIXZzCS5OG
// 設定最左的字母是[0]348Please respect copyright.PENANAZ5DRNERPXY
int start = 0;348Please respect copyright.PENANAVBqQO8xIQX
// 設定最右的字母是[文字總長度-1].348Please respect copyright.PENANAZIlC51dx4q
int end = s.length() - 1;348Please respect copyright.PENANA60jIULg2se
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的348Please respect copyright.PENANAzg2TMv25OQ
char[] sChar = s.toCharArray();348Please respect copyright.PENANAojOtQ6dUPO
348Please respect copyright.PENANAZdnVNxec4U
// While we still have characters to traverse348Please respect copyright.PENANAyRGepNzpEu
// while the word more than one letter, do this function348Please respect copyright.PENANAt4o0n2CnPi
while (start < end) {348Please respect copyright.PENANAFmFrpFWQYe
// Find the leftmost vowel348Please respect copyright.PENANAfGg5CPEzsH
// while start 少於 string length() 同時 [start] 不是vowel,return start ++348Please respect copyright.PENANAdX9BZPxITA
while (start < s.length () && !isVowel(sChar[start])) {348Please respect copyright.PENANA2c5h0eO1LU
start++;348Please respect copyright.PENANAre2NnJ2rdb
}348Please respect copyright.PENANA0LjYDatugB
// Find the rightmost vowel348Please respect copyright.PENANA4Fl3ETaikY
// while end 大於 0 同時 [end] 不是vowel,return end --348Please respect copyright.PENANANPaDl5ndSm
while (end >= 0 && !isVowel(sChar[end])) {348Please respect copyright.PENANA7W8EollKJc
end--;348Please respect copyright.PENANA1YOQQ40rOM
}348Please respect copyright.PENANAkpsd7sRwCe
// Swap them if start is left of end348Please respect copyright.PENANAsvRLVPrQPg
// swap function: (in what string, value 1, value 2), swap value 1 and 2348Please respect copyright.PENANAymtfEiNuo4
if (start < end) {348Please respect copyright.PENANAiFwsDUjF2J
swap(sChar, start++, end--);348Please respect copyright.PENANAsuzFJ7jOsJ
}348Please respect copyright.PENANADEMWYucevq
}348Please respect copyright.PENANAMk5yPtrXVS
348Please respect copyright.PENANAwOzLtrrvrO
// Converting char array back to String348Please respect copyright.PENANAnA6qdAKHfp
// 顯示新的String348Please respect copyright.PENANASGnttJy1OX
return new String(sChar);348Please respect copyright.PENANAYu2oMAUo3C
}348Please respect copyright.PENANAgsNyWwN1kR
};