天天看點

LeetCode345反轉字元串中的元音字母

題目:

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

示例 1:

輸入: "hello"
輸出: "holle"
示例 2:

輸入: "leetcode"
輸出: "leotcede"
說明:
元音字母不包含字母"y"。
           

思路:可先将所有的元音字母(包括大小寫放入HashSet容器中),在準備一個額外字元數組。

  • 各取字元串中的第一個字元和最後一個字元,如果容器裡面原來沒有,各自添加到輔助數組,各自的指針向前或向後走一步
  • 若發現都在容器裡面,同時放入輔助數組,但這時要交換位置,各自指針移動

   這張動圖停不錯的,位址:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/solution/shuang-zhi-zhen-onshi-jian-fu-za-du-by-cyc2018/

private final static HashSet<Character> set=new HashSet<Character>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
    public String reverseVowels(String s) {
        //先準備一個容器,裝入所有的元音字母
        
        int i=0,j=s.length()-1;
        //準備一個額外的數組
        char chs[]=new char[s.length()];
        while(i<=j){
            char ci=s.charAt(i);
            char cj=s.charAt(j);
            if(!set.contains(ci)){
                chs[i++]=ci;
            }else if(!set.contains(cj)){
                chs[j--]=cj;
            }else{
                chs[i++]=cj;
                chs[j--]=ci;
            }
        }
        return String.valueOf(chs);
}