## Description

LeetCode Problem 831.

You are given a personal information string s, representing either an email address or a phone number. Return the masked personal information using the below rules.

• A name consisting of uppercase and lowercase English letters, followed by
• The ‘@’ symbol, followed by
• The domain consisting of uppercase and lowercase English letters with a dot ‘.’ somewhere in the middle (not the first or last character). To mask an email:
• The uppercase letters in the name and domain must be converted to lowercase letters.
• The middle letters of the name (i.e., all but the first and last letters) must be replaced by 5 asterisks “*****”.

Phone number: A phone number is formatted as follows:

• The phone number contains 10-13 digits.
• The last 10 digits make up the local number.
• The remaining 0-3 digits, in the beginning, make up the country code.
• Separation characters from the set {‘+’, ‘-‘, ‘(‘, ‘)’, ‘ ‘} separate the above digits in some way.

• Remove all separation characters.
• The masked phone number should have the form:
• ”***-***-XXXX” if the country code has 0 digits.
• ”+*-***-***-XXXX” if the country code has 1 digit.
• ”+**-***-***-XXXX” if the country code has 2 digits.
• ”+***-***-***-XXXX” if the country code has 3 digits.
• “XXXX” is the last 4 digits of the local number.

Example 1:

``````1
2
3
4
Input: s = "LeetCode@LeetCode.com"
Output: "l*****e@leetcode.com"
Explanation: s is an email address.
The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks.
``````

Example 2:

``````1
2
3
4
5
Input: s = "AB@qq.com"
Output: "a*****b@qq.com"
Explanation: s is an email address.
The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks.
Note that even though "ab" is 2 characters, it still must have 5 asterisks in the middle.
``````

Example 3:

``````1
2
3
4
5
Input: s = "1(234)567-890"
Output: "***-***-7890"
Explanation: s is a phone number.
There are 10 digits, so the local number is 10 digits and the country code is 0 digits.
Thus, the resulting masked number is "***-***-7890".
``````

Example 4:

``````1
2
3
4
5
Input: s = "86-(10)12345678"
Output: "+**-***-***-5678"
Explanation: s is a phone number.
There are 12 digits, so the local number is 10 digits and the country code is 2 digits.
Thus, the resulting masked number is "+**-***-***-7890".
``````

Constraints:

• s is either a validemail or a phone number.
• If s is an email:
• 8 <= s.length <= 40
• sconsists of uppercase and lowercase English letters and exactly one ‘@’symbol and’.’symbol.
• If s is a phone number:
• 10 <= s.length <= 20
• sconsists of digits, spaces, and the symbols’(‘,’)’,’-‘, and’+’.

## Sample C++ Code

``````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
class Solution {
public:
string email(string &s, int id) {
string t = string(1, s[0] | ' ') + "*****" + string(1, s[id-1] | ' ');

for (int i = id + 1; i != s.size(); i++)
if (s[i] != '.')
s[i] |= ' ';

return t + s.substr(id, s.size());
}

string phone(string &s) {
string table[] = { "" , "+*-", "+**-", "+***-" }, t;

for(auto &ch: s)
if(ch >= '0' && ch <= '9')
t.push_back(ch);

return table[t.size() - 10] + "***-***-" + t.substr(t.size() - 4, 4);
}

int id = s.find('@');
return id == -1 ? phone(s) : email(s, id);
}
};
``````