
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.
371Please respect copyright.PENANAfv77QKqM21
Two Pointers
class Solution {371Please respect copyright.PENANAy5yfxPA1uR
// Return true if the character is a vowel (case-insensitive)371Please respect copyright.PENANAKE2gKJos7c
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU371Please respect copyright.PENANATRh3uFaw9G
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。371Please respect copyright.PENANAGrbaVDEnL8
boolean isVowel(char c) {371Please respect copyright.PENANAC9mHwGa0Jf
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'371Please respect copyright.PENANAsQOZRhbP5l
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';371Please respect copyright.PENANA6EcFa9Eydl
}371Please respect copyright.PENANANi9wksELoU
371Please respect copyright.PENANAQtZI0v6wj9
// Function to swap characters at index x and y371Please respect copyright.PENANA2oxBYXxEHl
void swap(char[] chars, int x, int y) {371Please respect copyright.PENANAZOtMsvOfU2
char temp = chars[x];371Please respect copyright.PENANAncTbmxw6cI
chars[x] = chars[y];371Please respect copyright.PENANAk8Qz9IrJb5
chars[y] = temp;371Please respect copyright.PENANAbsEBKwewkN
}371Please respect copyright.PENANAZnadRmhlQ1
371Please respect copyright.PENANAxAUPempFHq
public String reverseVowels(String s) {371Please respect copyright.PENANAeDVJoLpcYU
// 設定最左的字母是[0]371Please respect copyright.PENANALRUmP3v7Qr
int start = 0;371Please respect copyright.PENANAQlrPsRC8Ej
// 設定最右的字母是[文字總長度-1].371Please respect copyright.PENANARqCCahQ6uk
int end = s.length() - 1;371Please respect copyright.PENANAZ1wCZr5cTN
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的371Please respect copyright.PENANAd1hHsXgJKk
char[] sChar = s.toCharArray();371Please respect copyright.PENANApNU9VWRfQX
371Please respect copyright.PENANATIfantZnCW
// While we still have characters to traverse371Please respect copyright.PENANA0AXgLx5E5c
// while the word more than one letter, do this function371Please respect copyright.PENANAkV7GRwklin
while (start < end) {371Please respect copyright.PENANAGltfzCW8IE
// Find the leftmost vowel371Please respect copyright.PENANAxOSgUvFYyQ
// while start 少於 string length() 同時 [start] 不是vowel,return start ++371Please respect copyright.PENANAW4RGc2ghoR
while (start < s.length () && !isVowel(sChar[start])) {371Please respect copyright.PENANA23V70QjQEP
start++;371Please respect copyright.PENANAeYD1JBWs3X
}371Please respect copyright.PENANAAavVmuNnHU
// Find the rightmost vowel371Please respect copyright.PENANAFzFXCGKIae
// while end 大於 0 同時 [end] 不是vowel,return end --371Please respect copyright.PENANAjrbCdUJ1XH
while (end >= 0 && !isVowel(sChar[end])) {371Please respect copyright.PENANAlcWJk6Fh23
end--;371Please respect copyright.PENANAi1XTAhS2Gd
}371Please respect copyright.PENANAq87U371WmO
// Swap them if start is left of end371Please respect copyright.PENANAPSPYkGHHtk
// swap function: (in what string, value 1, value 2), swap value 1 and 2371Please respect copyright.PENANAAZAXoFUsas
if (start < end) {371Please respect copyright.PENANACIpqmuSmgS
swap(sChar, start++, end--);371Please respect copyright.PENANAELSKuKeydA
}371Please respect copyright.PENANApVdnuHI8O2
}371Please respect copyright.PENANAp4UX4hSpyJ
371Please respect copyright.PENANAfsl6XK9HQB
// Converting char array back to String371Please respect copyright.PENANARzry0kK4wu
// 顯示新的String371Please respect copyright.PENANAJVHDlANWWE
return new String(sChar);371Please respect copyright.PENANAPdiaUWMdFw
}371Please respect copyright.PENANAv7cUjlCP6p
};