隐藏个人信息【LC831】
给你一条个人信息字符串
s
,可能表示一个 邮箱地址 ,也可能表示一串 电话号码 。返回按如下规则 隐藏 个人信息后的结果:电子邮件地址:
一个电子邮件地址由以下部分组成:
- 一个 名字 ,由大小写英文字母组成,后面跟着
- 一个
'@'
字符,后面跟着- 一个 域名 ,由大小写英文字母和一个位于中间的
'.'
字符组成。'.'
不会是域名的第一个或者最后一个字符。要想隐藏电子邮件地址中的个人信息:
- 名字 和 域名 部分的大写英文字母应当转换成小写英文字母。
- 名字 中间的字母(即,除第一个和最后一个字母外)必须用 5 个
"*****"
替换。电话号码:
一个电话号码应当按下述格式组成:
- 电话号码可以由 10-13 位数字组成
- 后 10 位构成 本地号码
- 前面剩下的 0-3 位,构成 国家代码
- 利用
{'+', '-', '(', ')', ' '}
这些 分隔字符 按某种形式对上述数字进行分隔
要想隐藏电话号码中的个人信息:
- 移除所有 分隔字符
- 隐藏个人信息后的电话号码应该遵从这种格式:
"***-***-XXXX"
如果国家代码为 0 位数字
"+*-***-***-XXXX"
如果国家代码为 1 位数字"+**-***-***-XXXX"
如果国家代码为 2 位数字"+***-***-***-XXXX"
如果国家代码为 3 位数字
"XXXX"
是最后 4 位 本地号码
虽然很长…
- 思路:模拟
- 通过字符串中是否包含@判断字符串是手机号还是邮箱,然后按题意进行隐藏
- 如果是邮箱,那么只需找到@的位置,然后将相应的字符按顺序放入结果
- 如果是手机号,那么需要统计数字的个数,然后找到最后的四位数字
- 实现
class Solution { public String maskPII(String s) { s = s.toLowerCase(); int index = s.indexOf('@'); if (index != -1){ return maskEmail(s, index); }else{ return maskPhone(s); } } public String maskEmail(String s, int index){ return s.substring(0, 1) + "*****" + s.substring(index - 1); } public String maskPhone(String s){ int n = s.length(); StringBuilder last = new StringBuilder(); int i = n - 1; int count = 0; while (i >= 0){ if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){ if (last.length() < 4 ){ last.insert(0, s.charAt(i)); } count++; } i--; } if (count == 10){ return "***-***-" + last.toString(); }if (count == 11){ return "+*-***-***-" + last.toString(); }else if (count == 12){ return "+**-***-***-" + last.toString(); }else if (count == 13){ return "+***-***-***-" + last.toString(); } return ""; } }
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); } } 作者:力扣官方题解 链接:https://leetcode.cn/problems/masking-personal-information/solutions/2200759/yin-cang-ge-ren-xin-xi-by-leetcode-solut-2enf/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。