天天看點

leetcode345. 反轉字元串中的元音字母題目解題

題目

編寫一個函數,以字元串作為輸入,反轉該字元串中的元音字母。

示例 1:

輸入: “hello”

輸出: “holle”

示例 2:

輸入: “leetcode”

輸出: “leotcede”

說明:

元音字母不包含字母"y"。

解題

  1. 這一題其實和344的反轉字元串是一個思路, 一樣使用對撞指針
  2. 需要判斷字母是不是元音字母, 非元音字母就跳過
  3. 為了節約時間, 提高性能, 分别将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);
        
    }
    
    
    
}