题目描述
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入:"hello"
输出:"holle"
条件分析
- 原地修改,考虑使用交换;
解题思路(指针对撞)
- 定义两个指针left和right分别指向字符串的首尾,分别移动,直到双方都找到元音字母,进行交换,并各自相向移动一位,一直到两个指针相遇;
编码如下
public String reverseVowels(String s) {
char[] cs = s.toCharArray();
int left = 0;
int right = cs.length - 1;
while (left < right) {
if (!isAeiou(cs[left])) {
left++;
continue;
}
if (!isAeiou(cs[right])) {
right--;
continue;
}
swapChar(cs, left, right);
left++;
right--;
}
return new String(cs);
}
private boolean isAeiou(char c) {
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'
|| c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';
}
private void swapChar(char[] cs, int i, int j) {
char temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}