forked from kamyu104/LeetCode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreformat-phone-number.cpp
More file actions
27 lines (26 loc) · 889 Bytes
/
reformat-phone-number.cpp
File metadata and controls
27 lines (26 loc) · 889 Bytes
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
// Time: O(n)
// Space: O(1)
// inplace solution
class Solution {
public:
string reformatNumber(string number) {
int src_len = 0;
for (const auto& c : number) { // remove non-digit characters
if (isdigit(c)) {
number[src_len++] = c;
}
}
int dst_len = src_len + (src_len - 1) / 3;
number.resize(dst_len); // resize the buffer to expected final size
for (int i = src_len - 1, curr = dst_len - 1, l = (3 - src_len % 3) % 3; i >= 0; --i, ++l) {
if (l && l % 3 == 0) { // group by 3 digits
number[curr--] = '-';
}
number[curr--] = number[i];
}
if (dst_len >= 3 && number[dst_len - 2] == '-') { // adjust for the 4 digits case
swap(number[dst_len - 3], number[dst_len - 2]);
}
return number;
}
};