天天看点

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);
}