题目描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: “hello”
输出: “holle”
示例 2:
输入: “leetcode”
输出: “leotcede”
说明:
元音字母不包含字母"y"。
思路及解答
/*
思路:
使用双指针法
如果遇到前面的指针和后面的指针都遇到元音则交换
*/
class Solution {
public String reverseVowels(String s) {
int len = s.length();
if(s == null){
return null;
}
//如果作指针和右指针同时遇到元音字母,则交换;如果没有遇到则移动左右指针,因为涉及到字母的交换以及字符的不可变性,所以这里使用字符串数组
//将字符串转化为字符串数组
char[] chars = s.toCharArray();
//定义左右指针
int left = 0;
int right = len-1;
while(left < right){
while(!isVowel(chars[left]) && (left<right))
left++;
while(!isVowel(chars[right]) && (left<right))
right--;
if(isVowel(chars[left]) && isVowel(chars[right])){
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
//将字符串数组转化为字符串
String ss = new String(chars);
return ss;
}
//验证这个字符是否为元音字符
public boolean isVowel(char c){
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){
return true;
}
if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U'){
return true;
}
return false;
}
}