题目:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 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);
}