
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.
306Please respect copyright.PENANAhuKbSapKbW
Two Pointers
class Solution {306Please respect copyright.PENANAefQGxqpeLS
// Return true if the character is a vowel (case-insensitive)306Please respect copyright.PENANAagVMxU6r0e
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU306Please respect copyright.PENANAGFYbRNYihQ
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。306Please respect copyright.PENANAp2wzIyUBfM
boolean isVowel(char c) {306Please respect copyright.PENANAhR4w7dt49E
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'306Please respect copyright.PENANAVKFLqsoBuC
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';306Please respect copyright.PENANAKyof3o4DNc
}306Please respect copyright.PENANA7SHkDOePSu
306Please respect copyright.PENANAHQlWEZVOjI
// Function to swap characters at index x and y306Please respect copyright.PENANAcqLFbhp0co
void swap(char[] chars, int x, int y) {306Please respect copyright.PENANAJKjBpmzygV
char temp = chars[x];306Please respect copyright.PENANATSQn11W9u5
chars[x] = chars[y];306Please respect copyright.PENANA06hUbQN8As
chars[y] = temp;306Please respect copyright.PENANA4kLuc4F8rR
}306Please respect copyright.PENANAXEhvxnJ7Ih
306Please respect copyright.PENANAdx2sVgRkQb
public String reverseVowels(String s) {306Please respect copyright.PENANAxZvLO8DmLr
// 設定最左的字母是[0]306Please respect copyright.PENANAPiUXJkW317
int start = 0;306Please respect copyright.PENANALel18cWGmS
// 設定最右的字母是[文字總長度-1].306Please respect copyright.PENANAbxrx2dadxa
int end = s.length() - 1;306Please respect copyright.PENANAgrDaqHSyiB
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的306Please respect copyright.PENANAuuNg4l9iCw
char[] sChar = s.toCharArray();306Please respect copyright.PENANA7DbSCFWUo7
306Please respect copyright.PENANAu273N8b8Y0
// While we still have characters to traverse306Please respect copyright.PENANAWXRwEvoTOS
// while the word more than one letter, do this function306Please respect copyright.PENANAMMwkhmU9cT
while (start < end) {306Please respect copyright.PENANADdPFKZ76J0
// Find the leftmost vowel306Please respect copyright.PENANAtLKAzmoHA9
// while start 少於 string length() 同時 [start] 不是vowel,return start ++306Please respect copyright.PENANAP43ndu2dJJ
while (start < s.length () && !isVowel(sChar[start])) {306Please respect copyright.PENANAqVC5nzxC2A
start++;306Please respect copyright.PENANACTUAzl1aRY
}306Please respect copyright.PENANAxovgBDBRRU
// Find the rightmost vowel306Please respect copyright.PENANACNJthWqTdg
// while end 大於 0 同時 [end] 不是vowel,return end --306Please respect copyright.PENANAW4zpWch8dd
while (end >= 0 && !isVowel(sChar[end])) {306Please respect copyright.PENANAWEMMfh5CJq
end--;306Please respect copyright.PENANA5SQnUeXNm3
}306Please respect copyright.PENANAnCPISjskna
// Swap them if start is left of end306Please respect copyright.PENANAJVgklNsykH
// swap function: (in what string, value 1, value 2), swap value 1 and 2306Please respect copyright.PENANA6umzYTdtkV
if (start < end) {306Please respect copyright.PENANA9rSAvkHimY
swap(sChar, start++, end--);306Please respect copyright.PENANAk5RQN5m57w
}306Please respect copyright.PENANAfGVSw1tBub
}306Please respect copyright.PENANAmWs0cCq1IV
306Please respect copyright.PENANAZxpvT2oT7U
// Converting char array back to String306Please respect copyright.PENANA1Dm8JG9RH6
// 顯示新的String306Please respect copyright.PENANAaFqvGUnUVR
return new String(sChar);306Please respect copyright.PENANApdVLwD1mld
}306Please respect copyright.PENANAXTRHLDKdz2
};