返回介绍

solution / 0800-0899 / 0831.Masking Personal Information / README_EN

发布于 2024-06-17 01:03:34 字数 7005 浏览 0 评论 0 收藏 0

831. Masking Personal Information

中文文档

Description

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:

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:

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:

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

 

Constraints:

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

Solutions

Solution 1

class Solution:
  def maskPII(self, s: str) -> str:
    if s[0].isalpha():
      s = s.lower()
      return s[0] + '*****' + s[s.find('@') - 1 :]
    s = ''.join(c for c in s if c.isdigit())
    cnt = len(s) - 10
    suf = '***-***-' + s[-4:]
    return suf if cnt == 0 else f'+{"*" * cnt}-{suf}'
class Solution {
  public String maskPII(String s) {
    if (Character.isLetter(s.charAt(0))) {
      s = s.toLowerCase();
      int i = s.indexOf('@');
      return s.substring(0, 1) + "*****" + s.substring(i - 1);
    }
    StringBuilder sb = new StringBuilder();
    for (char c : s.toCharArray()) {
      if (Character.isDigit(c)) {
        sb.append(c);
      }
    }
    s = sb.toString();
    int cnt = s.length() - 10;
    String suf = "***-***-" + s.substring(s.length() - 4);
    return cnt == 0 ? suf
            : "+"
        + "*".repeat(cnt) + "-" + suf;
  }
}
class Solution {
public:
  string maskPII(string s) {
    int i = s.find('@');
    if (i != -1) {
      string ans;
      ans += tolower(s[0]);
      ans += "*****";
      for (int j = i - 1; j < s.size(); ++j) {
        ans += tolower(s[j]);
      }
      return ans;
    }
    string t;
    for (char c : s) {
      if (isdigit(c)) {
        t += c;
      }
    }
    int cnt = t.size() - 10;
    string suf = "***-***-" + t.substr(t.size() - 4);
    return cnt == 0 ? suf : "+" + string(cnt, '*') + "-" + suf;
  }
};
func maskPII(s string) string {
  i := strings.Index(s, "@")
  if i != -1 {
    s = strings.ToLower(s)
    return s[0:1] + "*****" + s[i-1:]
  }
  t := []rune{}
  for _, c := range s {
    if c >= '0' && c <= '9' {
      t = append(t, c)
    }
  }
  s = string(t)
  cnt := len(s) - 10
  suf := "***-***-" + s[len(s)-4:]
  if cnt == 0 {
    return suf
  }
  return "+" + strings.Repeat("*", cnt) + "-" + suf
}
function maskPII(s: string): string {
  const i = s.indexOf('@');
  if (i !== -1) {
    let ans = s[0].toLowerCase() + '*****';
    for (let j = i - 1; j < s.length; ++j) {
      ans += s.charAt(j).toLowerCase();
    }
    return ans;
  }
  let t = '';
  for (const c of s) {
    if (/\d/.test(c)) {
      t += c;
    }
  }
  const cnt = t.length - 10;
  const suf = `***-***-${t.substring(t.length - 4)}`;
  return cnt === 0 ? suf : `+${'*'.repeat(cnt)}-${suf}`;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文