題目
編寫一個函數,以字元串作為輸入,反轉該字元串中的元音字母。
示例 1:
輸入: “hello”
輸出: “holle”
示例 2:
輸入: “leetcode”
輸出: “leotcede”
說明:
元音字母不包含字母"y"。
解題
- 這一題其實和344的反轉字元串是一個思路, 一樣使用對撞指針
- 需要判斷字母是不是元音字母, 非元音字母就跳過
- 為了節約時間, 提高性能, 分别将aeiouAEIOU10個字母以asc碼作為下标, 放入一個boolean型數組中, 然後判斷一個字母是不是元音時, 直接根據字母的asc碼在數組中擷取即可, 代碼如下:
class Solution {
// 空間換時間, 字母對應的最大是asc碼是122
// isVowel[i]為false表示i對應的字元不是元音, 為true是元音
private static boolean[] isVowel = new boolean[123];
static{
isVowel['a'] = true;
isVowel['e'] = true;
isVowel['i'] = true;
isVowel['o'] = true;
isVowel['u'] = true;
isVowel['A'] = true;
isVowel['E'] = true;
isVowel['I'] = true;
isVowel['O'] = true;
isVowel['U'] = true;
}
public String reverseVowels(String s) {
char[] chars = s.toCharArray();
int left = 0, right = chars.length - 1;
while(left < right){
if(!isVowel[chars[left]]){
left++;
continue;
}
if(!isVowel[chars[right]]){
right--;
continue;
}
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
return new String(chars);
}
}