列表

详情


831. 隐藏个人信息

给你一条个人信息字符串 s ,可能表示一个 邮箱地址 ,也可能表示一串 电话号码 。返回按如下规则 隐藏 个人信息后的结果:

电子邮件地址:

一个电子邮件地址由以下部分组成:

要想隐藏电子邮件地址中的个人信息:

电话号码:

一个电话号码应当按下述格式组成:

要想隐藏电话号码中的个人信息:

 

示例 1:

输入:s = "LeetCode@LeetCode.com"
输出:"l*****e@leetcode.com"
解释:s 是一个电子邮件地址。
名字和域名都转换为小写,名字的中间用 5 个 * 替换。

示例 2:

输入:s = "AB@qq.com"
输出:"a*****b@qq.com"
解释:s 是一个电子邮件地址。
名字和域名都转换为小写,名字的中间用 5 个 * 替换。
注意,尽管 "ab" 只有两个字符,但中间仍然必须有 5 个 * 。

示例 3:

输入:s = "1(234)567-890"
输出:"***-***-7890"
解释:s 是一个电话号码。
共计 10 位数字,所以本地号码为 10 位数字,国家代码为 0 位数字。
因此,隐藏后的电话号码应该是 "***-***-7890" 。

示例 4:

输入:s = "86-(10)12345678"
输出:"+**-***-***-5678"
解释:s 是一个电话号码。
共计 12 位数字,所以本地号码为 10 位数字,国家代码为 2 位数字。
因此,隐藏后的电话号码应该是 "+**-***-***-7890" 。

 

提示:

  • s 是一个 有效 的电子邮件或者电话号码
  • 如果 s 是一个电子邮件:
    • 8 <= s.length <= 40
    • s 是由大小写英文字母,恰好一个 '@' 字符,以及 '.' 字符组成
  • 如果 s 是一个电话号码:
    • 10 <= s.length <= 20
    • s 是由数字、空格、字符 '('')''-''+' 组成

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string maskPII(string s) { } };

python3 解法, 执行用时: 40 ms, 内存消耗: 14.8 MB, 提交时间: 2023-04-01 11:01:36

class Solution:
    def maskPII(self, s: str) -> str:
        if '@' in s: #email
            first, after = s.split('@')
            return "{}*****{}@{}".format(
                first[0], first[-1], after).lower()

        else: #phone
            import re
            digits = re.sub('[-()+\s]', '', s)
            local = "***-***-{}".format(digits[-4:])
            if len(digits) == 10:
                return local
            return "+{}-".format('*' * (len(digits) - 10)) + local

javascript 解法, 执行用时: 56 ms, 内存消耗: 40.8 MB, 提交时间: 2023-04-01 10:41:02

/**
 * @param {string} s
 * @return {string}
 */
const country = ["", "+*-", "+**-", "+***-"];

var maskPII = function(s) {
    const at = s.indexOf("@");
        if (at > 0) {
            s = s.toLowerCase();
            return (s[0] + "*****" + s.substring(at - 1)).toLowerCase();
        }
        let sb = "";
        for (let i = 0; i < s.length; i++) {
            const c = s.charAt(i);
            if ('0' <= c && c <= '9') {
                sb += c;
            }
        }
        s = sb.toString();
        return country[s.length - 10] + "***-***-" + s.substring(s.length - 4);
};

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-04-01 10:40:48

func maskPII(s string) string {
    at := strings.Index(s, "@")
    if at > 0 {
        s = strings.ToLower(s)
        return strings.ToLower(string(s[0])) + "*****" + s[at-1:]
    }
    var sb strings.Builder
    for i := 0; i < len(s); i++ {
        c := s[i]
        if unicode.IsDigit(rune(c)) {
            sb.WriteByte(c)
        }
    }
    s = sb.String()
    country := []string{"", "+*-", "+**-", "+***-"}
    return country[len(s)-10] + "***-***-" + s[len(s)-4:]
}

python3 解法, 执行用时: 40 ms, 内存消耗: 14.7 MB, 提交时间: 2023-04-01 10:40:26

class Solution:
    def maskPII(self, s: str) -> str:
        at = s.find('@')
        if at >= 0:
            return (s[0] + "*" * 5 + s[at - 1:]).lower()
        s = "".join(i for i in s if i.isdigit())
        return ["", "+*-", "+**-", "+***-"][len(s) - 10] + "***-***-" + s[-4:]

java 解法, 执行用时: 8 ms, 内存消耗: 40.5 MB, 提交时间: 2023-04-01 10:40:07

class Solution {
    String[] country = {"", "+*-", "+**-", "+***-"};

    public String maskPII(String s) {
        int at = s.indexOf("@");
        if (at > 0) {
            s = s.toLowerCase();
            return (s.charAt(0) + "*****" + s.substring(at - 1)).toLowerCase();
        }
        s = s.replaceAll("[^0-9]", "");
        return country[s.length() - 10] + "***-***-" + s.substring(s.length() - 4);
    }
}

java 解法, 执行用时: 6 ms, 内存消耗: 40 MB, 提交时间: 2023-04-01 10:39:18

class Solution {
    public String maskPII(String S) {
        int atIndex = S.indexOf('@');
        if (atIndex >= 0) { // email
            return (S.substring(0, 1) + "*****" + S.substring(atIndex - 1)).toLowerCase();
        } else { // phone
            String digits = S.replaceAll("\\D+", "");
            String local = "***-***-" + digits.substring(digits.length() - 4);
            if (digits.length() == 10) return local;
            String ans = "+";
            for (int i = 0; i < digits.length() - 10; ++i)
                ans += "*";
            return ans + "-" + local;
        }
    }
}

上一题