
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.
384Please respect copyright.PENANAfYF85fldJD
Two Pointers
class Solution {384Please respect copyright.PENANAImy2hsgTXG
// Return true if the character is a vowel (case-insensitive)384Please respect copyright.PENANAJYn4QbgeHh
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU384Please respect copyright.PENANAUNHBCsKHrH
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。384Please respect copyright.PENANAdETkRpoyPz
boolean isVowel(char c) {384Please respect copyright.PENANAgV52jX21Ri
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'384Please respect copyright.PENANAihWk2RlPYq
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';384Please respect copyright.PENANAQidk8qwRab
}384Please respect copyright.PENANA17JUETdWog
384Please respect copyright.PENANAgC0ht1DzHN
// Function to swap characters at index x and y384Please respect copyright.PENANAuTUVucRSD1
void swap(char[] chars, int x, int y) {384Please respect copyright.PENANAsdEnIKfbsx
char temp = chars[x];384Please respect copyright.PENANAhGKT914wM1
chars[x] = chars[y];384Please respect copyright.PENANAsRiiA23uqX
chars[y] = temp;384Please respect copyright.PENANAQqptB4vJmq
}384Please respect copyright.PENANAVZrl52Y0HD
384Please respect copyright.PENANAuaSxKIEp67
public String reverseVowels(String s) {384Please respect copyright.PENANA6tWvjIrTAb
// 設定最左的字母是[0]384Please respect copyright.PENANAgnEEmG9YXK
int start = 0;384Please respect copyright.PENANAXJavUsmPSZ
// 設定最右的字母是[文字總長度-1].384Please respect copyright.PENANAoqmNQM0FfD
int end = s.length() - 1;384Please respect copyright.PENANAc2XMR3CgEC
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的384Please respect copyright.PENANAF1XpteO7qv
char[] sChar = s.toCharArray();384Please respect copyright.PENANAccid63X83V
384Please respect copyright.PENANASkHK1uWufX
// While we still have characters to traverse384Please respect copyright.PENANArN94E14GPq
// while the word more than one letter, do this function384Please respect copyright.PENANAMxF2IlvlA9
while (start < end) {384Please respect copyright.PENANAHQrnhMT6hY
// Find the leftmost vowel384Please respect copyright.PENANAUUWPd7THmf
// while start 少於 string length() 同時 [start] 不是vowel,return start ++384Please respect copyright.PENANABIbuybRBZn
while (start < s.length () && !isVowel(sChar[start])) {384Please respect copyright.PENANA8IP2QIXxVm
start++;384Please respect copyright.PENANAqV04eZwoTy
}384Please respect copyright.PENANATs14polyan
// Find the rightmost vowel384Please respect copyright.PENANATm3CVW2ynk
// while end 大於 0 同時 [end] 不是vowel,return end --384Please respect copyright.PENANAi6a2oSXn06
while (end >= 0 && !isVowel(sChar[end])) {384Please respect copyright.PENANAa8K2RaJQNd
end--;384Please respect copyright.PENANAVTWxt8djqB
}384Please respect copyright.PENANAHmvuG1hbu4
// Swap them if start is left of end384Please respect copyright.PENANA8yoVdssjgT
// swap function: (in what string, value 1, value 2), swap value 1 and 2384Please respect copyright.PENANAXUPI68IGBs
if (start < end) {384Please respect copyright.PENANAMHjwJKnvRV
swap(sChar, start++, end--);384Please respect copyright.PENANAP5pgcsezLc
}384Please respect copyright.PENANAZnAH3THXrp
}384Please respect copyright.PENANAajCWbJlRtd
384Please respect copyright.PENANAqOlJIfoqgL
// Converting char array back to String384Please respect copyright.PENANAtygGhu13vc
// 顯示新的String384Please respect copyright.PENANAKLV6jDrbKI
return new String(sChar);384Please respect copyright.PENANApod9BMmxhD
}384Please respect copyright.PENANAvVZM5Ou8zN
};