1、题目描述
给你一个字符串?s ?,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括?'a' 、'e' 、'i' 、'o' 、'u' ,且可能以大小写两种形式出现。
?2、算法分析
使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。
为了快速判断一个字符是不是元音字符,我们将全部元音字符添加到集合 HashSet 中,从而以 O(1) 的时间复杂度进行该操作。
知识补充:
①获取字符串中的其中的某个字符:string.charAt(int index)
②String str = new String(),将字符数组转换为字符串,看下String的源码就知道了
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
3、代码实现
/**
双指针法
*/
class Solution {
// Set不运行重复,无序
public static final Set<Character> set = new HashSet<>(
Arrays.asList('a','e','i','o','u','A','E','I','O','U')
);
public String reverseVowels(String s) {
if(s == null){
return null;
}
// 定义结果数组
char[] result = new char[s.length()];
int i = 0,j = s.length() - 1;
while(i <= j){
// 获取字符串中的
char ci = s.charAt(i);
char cj = s.charAt(j);
// 无论set.contains(cj),都不影响
if(!set.contains(ci)){
result[i++] = ci;
}else if(!set.contains(cj)){
result[j--] = cj;
}else{
result[i++] = cj;
result[j--] = ci;
}
}
return new String(result);
}
}
|