题目链接
解题思路
采用双指针中的两端指针的思想,有几个点要考虑:
- 元音字母不仅包含小写字母,要考虑到。使用HashSet进行元音字母的存储,使用contains进行存在性比较。
- 进行字符类型的调换时,不能使用charAt()这个函数只是用来展示用的,由于String类型的不可修改性。要进行位置调换,只能将字符串转换为字符数组或使用StringBuilder进行操作。
思路:两端指针,其中有一端指向的不是元音字符,则对向的指针向自己移动,如果两指针均指向元音字母,则进行调换,最后将字符数组转换为String类型进行输出。
代码
class Solution {
HashSet<Character> yuanyin= new HashSet<>(){
{//创建set集合,用来存储元音字符,方便后面contains使用
add('a');
add('e');
add('i');
add('o');
add('u');
add('A');
add('E');
add('I');
add('O');
add('U');
}
};
public String reverseVowels(String s) {
int left=0;
int right=s.length()-1;
char[] a=s.toCharArray();
while(left<right){
if(yuanyin.contains(a[left])&&yuanyin.contains(a[right])){
char tmp;
tmp=a[left];
//这里不能使用charAt(),因为String是不可修改的类型,所以不能直接对其进行修改
a[left]=a[right];
a[right]=tmp;
left++;
right--;
}
else if(yuanyin.contains(s.charAt(left)))
right--;
else
left++;
}
return new String(a);
}
}
本文介绍了如何使用双指针技巧在Java中反转字符串中的元音字母,通过HashSet存储并检查元音,避免直接修改字符串。通过字符数组操作实现字符交换,提供了一个完整的解决方案。
341

被折叠的 条评论
为什么被折叠?



