
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.
307Please respect copyright.PENANAPIBtkcgJpM
Two Pointers
class Solution {307Please respect copyright.PENANACkkHNW2pZV
// Return true if the character is a vowel (case-insensitive)307Please respect copyright.PENANAkfyZcj7iUR
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU307Please respect copyright.PENANAA3tQjevT2c
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。307Please respect copyright.PENANADUDnbf5IN1
boolean isVowel(char c) {307Please respect copyright.PENANAstT26rcbAt
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'307Please respect copyright.PENANAtMqXfq2Gcc
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';307Please respect copyright.PENANAziv43XQNan
}307Please respect copyright.PENANAlZEDFo82iy
307Please respect copyright.PENANAShTxAQU8MI
// Function to swap characters at index x and y307Please respect copyright.PENANAP7hmYkpvbd
void swap(char[] chars, int x, int y) {307Please respect copyright.PENANAQVYZF4sqP7
char temp = chars[x];307Please respect copyright.PENANA1k6vQfb1Ap
chars[x] = chars[y];307Please respect copyright.PENANAIHalypeTXf
chars[y] = temp;307Please respect copyright.PENANA0npbOFuQiS
}307Please respect copyright.PENANAXEPNZnHzGm
307Please respect copyright.PENANA0KSLCD9YaU
public String reverseVowels(String s) {307Please respect copyright.PENANALYSRS3mShy
// 設定最左的字母是[0]307Please respect copyright.PENANA2A5BQzUGOr
int start = 0;307Please respect copyright.PENANA9Xvi6LqLOx
// 設定最右的字母是[文字總長度-1].307Please respect copyright.PENANAHbNBh2Qzma
int end = s.length() - 1;307Please respect copyright.PENANA2cnoDtogQ0
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的307Please respect copyright.PENANAkCs0dWDiBj
char[] sChar = s.toCharArray();307Please respect copyright.PENANA0uAQdK1fjC
307Please respect copyright.PENANAJ5ttyh5S2X
// While we still have characters to traverse307Please respect copyright.PENANAlT0VoKfodL
// while the word more than one letter, do this function307Please respect copyright.PENANAVQPtwxqHKa
while (start < end) {307Please respect copyright.PENANAQcqLD1lvxk
// Find the leftmost vowel307Please respect copyright.PENANANYJxWzGT7D
// while start 少於 string length() 同時 [start] 不是vowel,return start ++307Please respect copyright.PENANA6Th1sm0NNh
while (start < s.length () && !isVowel(sChar[start])) {307Please respect copyright.PENANADpzdaHPJYc
start++;307Please respect copyright.PENANANESOwvf9cs
}307Please respect copyright.PENANAd5mArgpXeX
// Find the rightmost vowel307Please respect copyright.PENANAn8fMJ9sbQq
// while end 大於 0 同時 [end] 不是vowel,return end --307Please respect copyright.PENANA3ZdiHOKHWA
while (end >= 0 && !isVowel(sChar[end])) {307Please respect copyright.PENANAE2Dq4c92Us
end--;307Please respect copyright.PENANAnSoSdzFykc
}307Please respect copyright.PENANANiCe2PDrVL
// Swap them if start is left of end307Please respect copyright.PENANAjAgi3Z16Ww
// swap function: (in what string, value 1, value 2), swap value 1 and 2307Please respect copyright.PENANASVPGlBPj3F
if (start < end) {307Please respect copyright.PENANA65MUKqTTT2
swap(sChar, start++, end--);307Please respect copyright.PENANA9hXDEthLPr
}307Please respect copyright.PENANAi6bvWUI0Cv
}307Please respect copyright.PENANAalvNhON0Xm
307Please respect copyright.PENANAYvi0Wgj5vL
// Converting char array back to String307Please respect copyright.PENANArOPVQJVOrI
// 顯示新的String307Please respect copyright.PENANAt0yaN2Ikpc
return new String(sChar);307Please respect copyright.PENANAYkr2pn9BNn
}307Please respect copyright.PENANAVgr9FVlDjM
};