Masking Personal Information Problem


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.

Email address: An email address is:

  • 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.

To mask a phone number:

  • 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);
    }
  
    string maskPII(string s) {
        int id = s.find('@'); 
        return id == -1 ? phone(s) : email(s, id);
    }
};




Related Posts

String Without Aaa Or Bbb Problem

LeetCode 984. Given two integers a and b, return any...

Shifting Letters Problem

LeetCode 848. You are given a string s of lowercase...

Positions Of Large Groups Problem

LeetCode 830. In a string sof lowercase letters, these letters...

Orderly Queue Problem

LeetCode 899. You are given a string s and an...

Number Of Lines To Write String Problem

LeetCode 806. You are given a string s of lowercase...

Masking Personal Information Problem

LeetCode 831. You are given a personal information string s,...