
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.
332Please respect copyright.PENANAHTz3nitL07
Two Pointers
class Solution {332Please respect copyright.PENANATPLq51QRYe
// Return true if the character is a vowel (case-insensitive)332Please respect copyright.PENANASdfwPdEKUA
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU332Please respect copyright.PENANAz0MXSOZEzx
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。332Please respect copyright.PENANAb6QvcxfSRa
boolean isVowel(char c) {332Please respect copyright.PENANAAmT57iWvF0
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'332Please respect copyright.PENANA4i9FwNUCK9
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';332Please respect copyright.PENANAzkHsveojPI
}332Please respect copyright.PENANA6dCJKqzOWB
332Please respect copyright.PENANALL7z2zbD3h
// Function to swap characters at index x and y332Please respect copyright.PENANAPcOi5n2k14
void swap(char[] chars, int x, int y) {332Please respect copyright.PENANA9OEn6ldUvV
char temp = chars[x];332Please respect copyright.PENANAIvEvAnRrrK
chars[x] = chars[y];332Please respect copyright.PENANANgcKy1SVnZ
chars[y] = temp;332Please respect copyright.PENANAf8x9gAMBi2
}332Please respect copyright.PENANA3eGjbQdQGg
332Please respect copyright.PENANAP3mYFaj18r
public String reverseVowels(String s) {332Please respect copyright.PENANACLbKFAU0PL
// 設定最左的字母是[0]332Please respect copyright.PENANAEakEfo9SnR
int start = 0;332Please respect copyright.PENANAGb26hurIsz
// 設定最右的字母是[文字總長度-1].332Please respect copyright.PENANAQdJVP8ZmZC
int end = s.length() - 1;332Please respect copyright.PENANA1COXaNKmyg
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的332Please respect copyright.PENANAiQcrJH16Aw
char[] sChar = s.toCharArray();332Please respect copyright.PENANAqW3pKfFeX4
332Please respect copyright.PENANAqm9eKSrpdg
// While we still have characters to traverse332Please respect copyright.PENANAh7zM0WfPWA
// while the word more than one letter, do this function332Please respect copyright.PENANAzfvVj7nQVx
while (start < end) {332Please respect copyright.PENANAGMnLBqiL3E
// Find the leftmost vowel332Please respect copyright.PENANAvCUeTLF0bf
// while start 少於 string length() 同時 [start] 不是vowel,return start ++332Please respect copyright.PENANAN3W8l1q8yr
while (start < s.length () && !isVowel(sChar[start])) {332Please respect copyright.PENANATrUO8UxFQI
start++;332Please respect copyright.PENANA9ZIcCFvZ6k
}332Please respect copyright.PENANA0NloAoJ0bY
// Find the rightmost vowel332Please respect copyright.PENANAwOfyRh9k3n
// while end 大於 0 同時 [end] 不是vowel,return end --332Please respect copyright.PENANAQNbxJwm7iI
while (end >= 0 && !isVowel(sChar[end])) {332Please respect copyright.PENANAWYmao8vSFw
end--;332Please respect copyright.PENANApifX64OXLF
}332Please respect copyright.PENANAdUkuv6TBlV
// Swap them if start is left of end332Please respect copyright.PENANAQvnOnrqvMm
// swap function: (in what string, value 1, value 2), swap value 1 and 2332Please respect copyright.PENANACPFKjKtQVd
if (start < end) {332Please respect copyright.PENANAJcDWx4r8LW
swap(sChar, start++, end--);332Please respect copyright.PENANASUd6XZTM1a
}332Please respect copyright.PENANAgOCpNn5PVD
}332Please respect copyright.PENANAfQQEzPCAx3
332Please respect copyright.PENANAjQcKDU9huq
// Converting char array back to String332Please respect copyright.PENANAWRyr5CED56
// 顯示新的String332Please respect copyright.PENANAcZrUryXSD8
return new String(sChar);332Please respect copyright.PENANAR9JMmcIzxb
}332Please respect copyright.PENANAK8hvtFZ7ue
};