题目
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。
示例 1:
输入:s = "hello"
输出:"holle"
解题思路
解题思路:
- 题目的大概意思是
- 如果用双指针,那么当两个指针都为元音字母的时候,他们才会交换。然后left和right++。
- 不能直接对String字符串进行操作修改,因为String是固定,不可修改的,我们可以先将String改为数组
- toCharArray(); 将字符串改为数组
- indexOf(val) 判断字符串是否含有字符,没有返回-1
- 我们还是先判断出长度小于等于1的数组
- 我们用到了contains()方法,//字符串是否包含某字符
- s.charAt(left)+""将他变成一个字符串,避免报错。
- 然后双指针判断,不遍历数组,用left与right的大小来作为循环的依据
- (超时了好多次)
代码
public String reverseVowels(String s) {
if(s.length()<=1)
return s;
//定义双指针
int left = 0;
int right = s.length()-1;
//转数组,定义元音字符串
char arr[] = s.toCharArray();
while (left<right){
//都是元音 交换
if(haveChar(arr[left]) && haveChar(arr[right])){
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}else if(!haveChar(arr[right])){//left是 right不是
right--;
}else if(!haveChar(arr[left])){//left不是 right是
left++;
}
}
//将字符数组转为字符串
return new String(arr);
}
//定义是否包含元素的方法
public static boolean haveChar(char val){
return "aeiouAEIOU".indexOf(val) >= 0;
}