题目描述:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
说明:
元音字母不包含字母"y"。
思路:
使用双指针指向待反转的两个元音字符,一个指针从头向尾遍历,一个指针从尾到头遍历。
另:对元音字符存储的数据结构也非常影响运行速度和时间,一开始用的String存储的元音字符,取得时候就用charAt取,效率非常低,下面这是借鉴的代码用的HashSet集合存储的,并且设成了静态的,HashSet集合的好处是添加,删除,查询的效率高,并且不重复,缺点是无序。
代码:
class Solution {
private final static HashSet<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
public String reverseVowels(String s) {
char[] result = new char[s.length()];
int i = 0;
int j = s.length() - 1;
while (i <= j) {
char charI = s.charAt(i);
char charJ = s.charAt(j);
if (!vowels.contains(charI )) {
result[i++] = charI;
} else if (!vowels.contains(charJ)) {
result[j--] = charJ;
} else {
result[i++] = charJ;
result[j--] = charI;
}
}
return new String(result);
}
}