-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
111 lines (97 loc) · 3.09 KB
/
main.cpp
File metadata and controls
111 lines (97 loc) · 3.09 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Source: https://leetcode.com/problems/sort-vowels-in-a-string
// Title: Sort Vowels in a String
// Difficulty: Medium
// Author: Mu Yang <http://muyang.pro>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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 <= 10^5`
// - `s` consists only of letters of theEnglish alphabetin **uppercase and lowercase**.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
// Copy & Sort
class Solution {
public:
string sortVowels(string s) {
int n = s.size();
auto isVowel = [](char ch) -> bool {
return ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U' || //
ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
};
// Extract
auto vowels = vector<char>();
for (auto ch : s) {
if (isVowel(ch)) {
vowels.push_back(ch);
}
}
// Sort
sort(vowels.begin(), vowels.end());
// Replace
auto v = 0;
for (auto i = 0; i < n; ++i) {
if (isVowel(s[i])) {
s[i] = vowels[v++];
}
}
return s;
}
};
// Counting Sort
class Solution2 {
public:
string sortVowels(string s) {
int n = s.size();
auto isVowel = [](char ch) -> bool {
return ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U' || //
ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
};
// Extract
auto counter = array<int, 128>();
for (auto ch : s) {
if (isVowel(ch)) {
counter[ch]++;
}
}
// Replace
auto ch = 0;
for (auto i = 0; i < n; ++i) {
if (isVowel(s[i])) {
while (counter[ch] == 0) ++ch;
counter[ch]--;
s[i] = ch;
}
}
return s;
}
};