LeetCode-in-Java

2785. Sort Vowels in a String

Medium

Given a 0-indexed string s, permute s to get a new string t such that:

Return the resulting string.

The vowels are 'a', 'e', 'i', 'o', and 'u', and they can appear in lowercase or uppercase. Consonants comprise all letters that are not vowels.

Example 1:

Input: s = “lEetcOde”

Output: “lEOtcede”

Explanation: ‘E’, ‘O’, and ‘e’ are the vowels in s; ‘l’, ‘t’, ‘c’, and ‘d’ are all consonants. The vowels are sorted according to their ASCII values, and the consonants remain in the same places.

Example 2:

Input: s = “lYmpH”

Output: “lYmpH”

Explanation: There are no vowels in s (all characters in s are consonants), so we return “lYmpH”.

Constraints:

Solution

public class Solution {
    public String sortVowels(String s) {
        int[] vowelCount = new int[11];
        int[] countIndexMap = new int[128];
        char[] result = s.toCharArray();
        char[] charMap = "AEIOUaeiou".toCharArray();
        for (int i = 0; i < charMap.length; i++) {
            countIndexMap[charMap[i]] = i + 1;
        }
        for (char c : result) {
            vowelCount[countIndexMap[c]]++;
        }
        int j = 1;
        int i = 0;
        while (j < vowelCount.length) {
            if (vowelCount[j] > 0) {
                while (i < result.length) {
                    if (countIndexMap[result[i]] == 0) {
                        i++;
                    } else {
                        vowelCount[j]--;
                        result[i++] = charMap[j - 1];
                        break;
                    }
                }
            } else {
                j++;
            }
        }
        return new String(result);
    }
}