leetcode 345 反转字符串中的元音字母

发布于 2023-01-28
https://leetcode.cn/problems/reverse-vowels-of-a-string/description/ 题目

https://leetcode.cn/problems/reverse-vowels-of-a-string/description/

题目

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a''e''i''o''u',且可能以大小写两种形式出现不止一次。

示例 1:

输入: s = "hello" 输出:"holle"

示例 2:

输入: s = "leetcode" 输出:"leotcede"

提示:

  • 1 <= s.length <= 3 * 105
  • s 由 可打印的 ASCII 字符组成

思路

使用两个指针,一个从左一个从右,向中间靠拢,如果双方都处于元音字母上,则进行交换。直到两者相交。

代码

class Solution {
    private final char[] vowels = new char[]{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};

    public String reverseVowels(String s) {
        char[] arr = s.toCharArray();

        int i = 0;
        int j = s.length() - 1;
        while (i < j) {
            while (i < j && !isVowels(s.charAt(i))) {
                i++;
            }

            while (i < j && !isVowels(s.charAt(j))) {
                j--;
            }

            if (i < j) {
                arr[j] = s.charAt(i);
                arr[i] = s.charAt(j);
                i++;
                j--;
            }
        }

        return new String(arr);
    }

    private boolean isVowels(char test) {
        for (char c : vowels) {
            if (c == test) {
                return true;
            }
        }
        return false;
    }
    
}