题目:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello" 输出: "holle"
示例 2:
输入: "leetcode" 输出: "leotcede"
说明:
元音字母不包含字母"y"。
思路:
首先要判断字母是不是元音。然后根据判断结果来决定左边和右边是否继续前进。如果有一方不是元音,则那一方就要继续前进,而另一方就要等待对面遍历到元音字母,完成交换。有点跟快排类似。
代码:
public String reverseVowels(String s) {
int len = s.length();
char[] strBuilder = new char[len];
int left = 0 ;
int right = len -1;
while( left <= right){
//LeetCode是类名
boolean leftFlag = LeetCode.isYuan(s.charAt(left));
boolean rightFlag = LeetCode.isYuan(s.charAt(right));
if(!leftFlag && !rightFlag){
strBuilder[left] = s.charAt(left);left++;
strBuilder[right] = s.charAt(right);right--;
}else if(!leftFlag){
strBuilder[left] = s.charAt(left);left++;
}else if(!rightFlag){
strBuilder[right] = s.charAt(right);right--;
}else{
//如果都是元音,则交换
char temp = s.charAt(left);
strBuilder[left++] = s.charAt(right);
strBuilder[right--] = temp;
}
}
return new String(strBuilder);
}
//判断元音
public static boolean isYuan(char c){
char[] ai = new char[]{'a','e','i','o','u'};
char[] ae = new char[]{'A','E','I','O','U'};
for(int i= 0;i< ai.length;i++){
if(c - ai[i] == 0 || c - ae[i] ==0){
return true;
}
}
return false;
}