摘要:整体思路像「双路快排」。双指针一头一尾,向中间走,遇到元音的时候停下来,然后交换,这里面的细节需要很清楚。
参考代码:
public class Solution {
public String reverseVowels(String s) {
int len = s.length();
if (len < 2) {
return s;
}
char[] charArray = s.toCharArray();
int left = 0;
int right = len - 1;
while (left < right) {
while (left < right && checkVowels(charArray[left])) {
left++;
}
while (left < right && checkVowels(charArray[right])) {
right--;
}
if (left < right) {
swap(charArray, left, right);
left++;
right--;
}
}
return new String(charArray);
}
private void swap(char[] chars, int index1, int index2) {
char temp = chars[index1];
chars[index1] = chars[index2];
chars[index2] = temp;
}
private boolean checkVowels(char c) {
return c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u' &&
c != 'A' && c != 'E' && c != 'I' && c != 'O' && c != 'U';
}
}