Welcome to Subscribe On Youtube

2785. Sort Vowels in a String

Description

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

  • All consonants remain in their original places. More formally, if there is an index i with 0 <= i < s.length such that s[i] is a consonant, then t[i] = s[i].
  • The vowels must be sorted in the nondecreasing order of their ASCII values. More formally, for pairs of indices i, j with 0 <= i < j < s.length such that s[i] and s[j] are vowels, then t[i] must not have a higher ASCII value than t[j].

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:

  • 1 <= s.length <= 105
  • s consists only of letters of the English alphabet in uppercase and lowercase.

Solutions

  • class Solution { public String sortVowels(String s) { List<Character> vs = new ArrayList<>(); char[] cs = s.toCharArray(); for (char c : cs) { char d = Character.toLowerCase(c); if (d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u') { vs.add(c); } } Collections.sort(vs); for (int i = 0, j = 0; i < cs.length; ++i) { char d = Character.toLowerCase(cs[i]); if (d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u') { cs[i] = vs.get(j++); } } return String.valueOf(cs); } } 
  • class Solution { public: string sortVowels(string s) { string vs; for (auto c : s) { char d = tolower(c); if (d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u') { vs.push_back(c); } } sort(vs.begin(), vs.end()); for (int i = 0, j = 0; i < s.size(); ++i) { char d = tolower(s[i]); if (d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u') { s[i] = vs[j++]; } } return s; } }; 
  • class Solution: def sortVowels(self, s: str) -> str: vs = [c for c in s if c.lower() in "aeiou"] vs.sort() cs = list(s) j = 0 for i, c in enumerate(cs): if c.lower() in "aeiou": cs[i] = vs[j] j += 1 return "".join(cs) 
  • func sortVowels(s string) string { cs := []byte(s) vs := []byte{} for _, c := range cs { d := c | 32 if d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u' { vs = append(vs, c) } } sort.Slice(vs, func(i, j int) bool { return vs[i] < vs[j] }) j := 0 for i, c := range cs { d := c | 32 if d == 'a' || d == 'e' || d == 'i' || d == 'o' || d == 'u' { cs[i] = vs[j] j++ } } return string(cs) } 
  • function sortVowels(s: string): string { const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; const vs = s .split('') .filter(c => vowels.includes(c)) .sort(); const ans: string[] = []; let j = 0; for (const c of s) { ans.push(vowels.includes(c) ? vs[j++] : c); } return ans.join(''); } 
  • public class Solution { public string SortVowels(string s) { List<char> vs = new List<char>(); char[] cs = s.ToCharArray(); foreach (char c in cs) { if (IsVowel(c)) { vs.Add(c); } } vs.Sort(); for (int i = 0, j = 0; i < cs.Length; ++i) { if (IsVowel(cs[i])) { cs[i] = vs[j++]; } } return new string(cs); } public bool IsVowel(char c) { c = char.ToLower(c); return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; } } 

All Problems

All Solutions