2887 Sort Vowels In A String
2887 Sort Vowels In A String
Sort Vowels in a String 
Given a 0-indexed string s, permute s to get a new string t such that:
1
2
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:
1
2
3
4
5
**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:
1
2
3
4
5
**Input:** s = "lYmpH"
**Output:** "lYmpH"
**Explanation:** There are no vowels in s (all characters in s are consonants), so we return "lYmpH".
Constraints:
1
2
1 <= s.length <= 105
s consists only of letters of the English alphabet in **uppercase and lowercase**.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class Solution:
def sortVowels(self, s1: str) -> str:
mp = [0] * 10 # AEIOUaeiou
s = {}
s['A'] = 0
s['E'] = 1
s['I'] = 2
s['O'] = 3
s['U'] = 4
s['a'] = 5
s['e'] = 6
s['i'] = 7
s['o'] = 8
s['u'] = 9
for k in s1:
if k in s:
if k == "A":
mp[0] += 1
if k == "E":
mp[1] += 1
if k == "I":
mp[2] += 1
if k == "O":
mp[3] += 1
if k == "U":
mp[4] += 1
if k == "a":
mp[5] += 1
if k == "e":
mp[6] += 1
if k == "i":
mp[7] += 1
if k == "o":
mp[8] += 1
if k == "u":
mp[9] += 1
s2 = ""
for i,k in enumerate(s1):
filled = False
if k in s:
for j, m in enumerate(mp):
if m > 0:
mp[j] -= 1
for k1,v in s.items():
if v == j:
s2 += k1
filled = True
break
break
if not filled:
s2 += k
return s2
This post is licensed under CC BY 4.0 by the author.