问题描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例
输入: "hello"
输出: "holle"
输入: "leetcode"
输出: "leotcede"
说明:
元音字母不包含字母"y"。
思路
双指针法。指针分别指向开头第一个未交换的元音字母和末尾第一个未交换的元音字母。 然后交换。 这题为了高效率可以写很长的判定,懒得写了。思路都是一样的。只是一个用了HashSet, 一个就是写在if里了。
解决方案
class Solution {
public String reverseVowels(String s) {
Set<Character> set = new HashSet<>();
char[] chars = s.toCharArray();
set.add('a');set.add('e');set.add('i');set.add('o');set.add('u');
int left = 0, right = s.length()-1;
char tmp;
while(left < right){
if(!set.contains(chars[left])){
left++;
continue;
}
if(!set.contains(chars[right])){
right--;
continue;
}
tmp = chars[left];
chars[left] = chars[right];
chars[right] = tmp;
left++;
right--;
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < chars.length; i++){
sb.append(chars[i]);
}
return sb.toString();
}
}