「力扣」第 345 题:反转字符串中的元音字母

156 阅读1分钟

摘要:整体思路像「双路快排」。双指针一头一尾,向中间走,遇到元音的时候停下来,然后交换,这里面的细节需要很清楚。

参考代码

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';
    }
}