
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.
286Please respect copyright.PENANAe9TltEOelT
Two Pointers
class Solution {286Please respect copyright.PENANAX46SiB8CCA
// Return true if the character is a vowel (case-insensitive)286Please respect copyright.PENANAvcUe8imbzw
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU286Please respect copyright.PENANA3h6bnD4O9A
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。286Please respect copyright.PENANApIgcaaY6LK
boolean isVowel(char c) {286Please respect copyright.PENANAA1EeHEXSxl
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'286Please respect copyright.PENANARQJc6EDdd4
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';286Please respect copyright.PENANADaUnJMa1eR
}286Please respect copyright.PENANAnsi1tz3MAI
286Please respect copyright.PENANAk0yd6kb6xE
// Function to swap characters at index x and y286Please respect copyright.PENANALGb6agAPF8
void swap(char[] chars, int x, int y) {286Please respect copyright.PENANAiScyJ3vARN
char temp = chars[x];286Please respect copyright.PENANABrA7EAmLf7
chars[x] = chars[y];286Please respect copyright.PENANAJsRuploGD6
chars[y] = temp;286Please respect copyright.PENANABTNHUzm11K
}286Please respect copyright.PENANA2PKDxcfryX
286Please respect copyright.PENANAtYxtER1UbS
public String reverseVowels(String s) {286Please respect copyright.PENANAZsuKeEnWpX
// 設定最左的字母是[0]286Please respect copyright.PENANAZddYbJEITW
int start = 0;286Please respect copyright.PENANAnIxcLfH5tS
// 設定最右的字母是[文字總長度-1].286Please respect copyright.PENANA1nwSx4Myte
int end = s.length() - 1;286Please respect copyright.PENANABw2hMhLABF
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的286Please respect copyright.PENANAQ4GZqqzGo9
char[] sChar = s.toCharArray();286Please respect copyright.PENANAn384CWFeAX
286Please respect copyright.PENANAH8Kuvfn3zr
// While we still have characters to traverse286Please respect copyright.PENANAn8JhiSo8wl
// while the word more than one letter, do this function286Please respect copyright.PENANA9QIHOvonLy
while (start < end) {286Please respect copyright.PENANAxDGWfQDqBK
// Find the leftmost vowel286Please respect copyright.PENANAWnVD7kGvPo
// while start 少於 string length() 同時 [start] 不是vowel,return start ++286Please respect copyright.PENANAWZegsXnNMO
while (start < s.length () && !isVowel(sChar[start])) {286Please respect copyright.PENANAiuV9Z4Qy7d
start++;286Please respect copyright.PENANAv7MURKyjdm
}286Please respect copyright.PENANA65KSSFWoEe
// Find the rightmost vowel286Please respect copyright.PENANAtpMeuvSUEb
// while end 大於 0 同時 [end] 不是vowel,return end --286Please respect copyright.PENANAXXy8niRigv
while (end >= 0 && !isVowel(sChar[end])) {286Please respect copyright.PENANAeGMBk0O3oy
end--;286Please respect copyright.PENANAR3dxMexNiA
}286Please respect copyright.PENANANLwiIvVCDX
// Swap them if start is left of end286Please respect copyright.PENANA5TjNLJsAI4
// swap function: (in what string, value 1, value 2), swap value 1 and 2286Please respect copyright.PENANA3T1QuBqAYr
if (start < end) {286Please respect copyright.PENANAISzS1KHH5u
swap(sChar, start++, end--);286Please respect copyright.PENANAwbOIm28dS9
}286Please respect copyright.PENANAH062q8grgO
}286Please respect copyright.PENANAdKtMgvQl2f
286Please respect copyright.PENANAKhi8lAs2M8
// Converting char array back to String286Please respect copyright.PENANAbgteLRMvu3
// 顯示新的String286Please respect copyright.PENANAb9hqAUksR8
return new String(sChar);286Please respect copyright.PENANAGUXz2rJWSm
}286Please respect copyright.PENANAt0VGi4wS1v
};