
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.
338Please respect copyright.PENANAOLZXPwD771
Two Pointers
class Solution {338Please respect copyright.PENANArog0TVNYnt
// Return true if the character is a vowel (case-insensitive)338Please respect copyright.PENANAijjT3qwWmc
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU338Please respect copyright.PENANADnTy6hERsc
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。338Please respect copyright.PENANA46g19ZMgc5
boolean isVowel(char c) {338Please respect copyright.PENANAnvQRgdLcfl
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'338Please respect copyright.PENANAt87M437VxJ
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';338Please respect copyright.PENANAAucoAGq3aM
}338Please respect copyright.PENANAOm6ngoW05w
338Please respect copyright.PENANA6danSVQG7I
// Function to swap characters at index x and y338Please respect copyright.PENANABPXAEnQkQK
void swap(char[] chars, int x, int y) {338Please respect copyright.PENANAgS7x351mhd
char temp = chars[x];338Please respect copyright.PENANAdyz6W5CLIm
chars[x] = chars[y];338Please respect copyright.PENANAHRKuchJP6i
chars[y] = temp;338Please respect copyright.PENANAAr1zaoQmF4
}338Please respect copyright.PENANAEYWDUJ69t6
338Please respect copyright.PENANAtnUIoyiDeu
public String reverseVowels(String s) {338Please respect copyright.PENANAUNELdomryf
// 設定最左的字母是[0]338Please respect copyright.PENANAu8LKz16cpn
int start = 0;338Please respect copyright.PENANA7HEmvcaysR
// 設定最右的字母是[文字總長度-1].338Please respect copyright.PENANAP4RUXjnTS4
int end = s.length() - 1;338Please respect copyright.PENANAM8hKbegPRs
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的338Please respect copyright.PENANAsmMeIGIxr8
char[] sChar = s.toCharArray();338Please respect copyright.PENANAnIVmEeKtmj
338Please respect copyright.PENANArSxC4VzKB2
// While we still have characters to traverse338Please respect copyright.PENANAGULPfUcLGR
// while the word more than one letter, do this function338Please respect copyright.PENANAZdFUGzwIU4
while (start < end) {338Please respect copyright.PENANAHHCqJDXnmq
// Find the leftmost vowel338Please respect copyright.PENANApIVZc1OzNM
// while start 少於 string length() 同時 [start] 不是vowel,return start ++338Please respect copyright.PENANAx7ZTa1TiQ0
while (start < s.length () && !isVowel(sChar[start])) {338Please respect copyright.PENANAkZV2yPDdWp
start++;338Please respect copyright.PENANAMB3hwVhNTD
}338Please respect copyright.PENANAgkLQzprEou
// Find the rightmost vowel338Please respect copyright.PENANAj0ji6XRmwt
// while end 大於 0 同時 [end] 不是vowel,return end --338Please respect copyright.PENANASrJ1A2GF3I
while (end >= 0 && !isVowel(sChar[end])) {338Please respect copyright.PENANACp7FRvEJAM
end--;338Please respect copyright.PENANAcfmwhB9W3j
}338Please respect copyright.PENANAPEXyIrGrCE
// Swap them if start is left of end338Please respect copyright.PENANArUv4YPYIJl
// swap function: (in what string, value 1, value 2), swap value 1 and 2338Please respect copyright.PENANAlnCUbOhYOL
if (start < end) {338Please respect copyright.PENANA07dJba40s0
swap(sChar, start++, end--);338Please respect copyright.PENANAYAYiWSLEoG
}338Please respect copyright.PENANAjmJvgAsmtA
}338Please respect copyright.PENANALZ3OsJrRrD
338Please respect copyright.PENANARF3IXM47sT
// Converting char array back to String338Please respect copyright.PENANAaMzRon7zpP
// 顯示新的String338Please respect copyright.PENANAVODwt2FspA
return new String(sChar);338Please respect copyright.PENANAGcH2Igz0cg
}338Please respect copyright.PENANABO4dpNKyBO
};