
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.
248Please respect copyright.PENANAqGZQ3eISfq
Two Pointers
class Solution {248Please respect copyright.PENANA8qrYmssDxM
// Return true if the character is a vowel (case-insensitive)248Please respect copyright.PENANAXIUlXtOIXz
// booleann(for ture or false), 創造"isVowel"(class), 命名(char c), and add aeiouAEIOU248Please respect copyright.PENANAZHJDLvaLzJ
// 當 (char c) 不是vowel,return false/ 是vowel,return true
// * a||b = ab 全为 false 时,计算结果为 false,否则为 true。248Please respect copyright.PENANAO1wY4yfvXP
boolean isVowel(char c) {248Please respect copyright.PENANAwnOMfF4Mzk
return c == 'a' || c == 'i' || c == 'e' || c == 'o' || c == 'u'248Please respect copyright.PENANAJEVancKPGt
|| c == 'A' || c == 'I' || c == 'E' || c == 'O' || c == 'U';248Please respect copyright.PENANAYITVfqti5s
}248Please respect copyright.PENANAG2f3hkatN1
248Please respect copyright.PENANAKa0EQJWNpO
// Function to swap characters at index x and y248Please respect copyright.PENANAaPAPTBd0OU
void swap(char[] chars, int x, int y) {248Please respect copyright.PENANAV1erd6BINf
char temp = chars[x];248Please respect copyright.PENANA7No8lUQFUh
chars[x] = chars[y];248Please respect copyright.PENANAETFJ6Hk5PC
chars[y] = temp;248Please respect copyright.PENANAo31aN7DiM1
}248Please respect copyright.PENANAQh1JJ61hkl
248Please respect copyright.PENANA3zp8iAzh0I
public String reverseVowels(String s) {248Please respect copyright.PENANAtl79NEeKbf
// 設定最左的字母是[0]248Please respect copyright.PENANAoCaeTp3Ul3
int start = 0;248Please respect copyright.PENANAAmweDPOFVm
// 設定最右的字母是[文字總長度-1].248Please respect copyright.PENANAzcm6Y4aTEn
int end = s.length() - 1;248Please respect copyright.PENANA7BDIZUC2XE
// 將 String 轉換為 char 數組,因為 String 在 Java 中是不可變的248Please respect copyright.PENANAbuOLKV9ehZ
char[] sChar = s.toCharArray();248Please respect copyright.PENANAlgfWuYTRX1
248Please respect copyright.PENANAiUC9FDZGSk
// While we still have characters to traverse248Please respect copyright.PENANAGeOXx3DnI8
// while the word more than one letter, do this function248Please respect copyright.PENANATcDtBcmvVU
while (start < end) {248Please respect copyright.PENANANvUrCG8amF
// Find the leftmost vowel248Please respect copyright.PENANAqhJ6oBL7vd
// while start 少於 string length() 同時 [start] 不是vowel,return start ++248Please respect copyright.PENANA6QStqYzVRL
while (start < s.length () && !isVowel(sChar[start])) {248Please respect copyright.PENANAQF76cJo50D
start++;248Please respect copyright.PENANAdwCXVBcCvL
}248Please respect copyright.PENANANJ1ApxMVl9
// Find the rightmost vowel248Please respect copyright.PENANAVhsMHq0n6V
// while end 大於 0 同時 [end] 不是vowel,return end --248Please respect copyright.PENANA0tHdogrxax
while (end >= 0 && !isVowel(sChar[end])) {248Please respect copyright.PENANAHicWnElQxd
end--;248Please respect copyright.PENANAkknLpxJ7qm
}248Please respect copyright.PENANAfFR1oqvtMF
// Swap them if start is left of end248Please respect copyright.PENANAQlxjaNhgJ5
// swap function: (in what string, value 1, value 2), swap value 1 and 2248Please respect copyright.PENANAvrrB7fHClM
if (start < end) {248Please respect copyright.PENANAplnCdwSBBS
swap(sChar, start++, end--);248Please respect copyright.PENANAA2Onku9seZ
}248Please respect copyright.PENANAVs24oFBv25
}248Please respect copyright.PENANA0xbhBoGBIU
248Please respect copyright.PENANACtEBxJRmVm
// Converting char array back to String248Please respect copyright.PENANAKTqoOUISnI
// 顯示新的String248Please respect copyright.PENANA8ajZYOJ5iA
return new String(sChar);248Please respect copyright.PENANAgx7dduPbxh
}248Please respect copyright.PENANAP71fBKEchN
};