当前位置: 首页 > news >正文

【算法题】831. 隐藏个人信息

题目:

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

电子邮件地址:

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

一个 名字 ,由大小写英文字母组成,后面跟着
一个 ‘@’ 字符,后面跟着
一个 域名 ,由大小写英文字母和一个位于中间的 ‘.’ 字符组成。‘.’ 不会是域名的第一个或者最后一个字符。
要想隐藏电子邮件地址中的个人信息:

名字 和 域名 部分的大写英文字母应当转换成小写英文字母。
名字 中间的字母(即,除第一个和最后一个字母外)必须用 5 个 “*****” 替换。
电话号码:

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

电话号码可以由 10-13 位数字组成
后 10 位构成 本地号码
前面剩下的 0-3 位,构成 国家代码
利用 {‘+’, ‘-’, ‘(’, ‘)’, ’ '} 这些 分隔字符 按某种形式对上述数字进行分隔
要想隐藏电话号码中的个人信息:

移除所有 分隔字符
隐藏个人信息后的电话号码应该遵从这种格式:
--XXXX” 如果国家代码为 0 位数字
“+---XXXX" 如果国家代码为 1 位数字
"+
---XXXX" 如果国家代码为 2 位数字
"+
--**-XXXX” 如果国家代码为 3 位数字
“XXXX” 是最后 4 位 本地号码

示例 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 是由数字、空格、字符 ‘(’、‘)’、‘-’ 和 ‘+’ 组成

思路:

模拟,
我们首先判断 s 是邮箱还是电话号码。显然,如果 s 中有字符 ‘@’,那么它是邮箱,否则它是电话号码。

如果 s是邮箱,我们将 s 的 ‘@’之前的部分保留第一个和最后一个字符,中间用 “*****" 代替,并将整个字符串转换为小写。

如果 s 是电话号码,我们只保留 s 中的所有数字。使用首先将最后 10位本地号码变成 “--XXXX"的形式,再判断 s 中是否有额外的国际号码。如果有,则将国际号码之前添加 ‘+’ 号并加到本地号码的最前端。

如果有 10 位数字,则加上前缀位空字符串。
如果有 11 位数字,则加上前缀 “+*-“。
如果有 12位数字,则加上前缀 “+-。
如果有 13位数字,则加上前缀 “+
-”。

java代码:

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);
    }
}

相关文章:

  • arthas 源码分析 篇一 【结构篇】
  • HTML5 <abbr> 标签 和 HTML5 <applet> 标签
  • C++面向对象高级编程(上)
  • 安装和配置 Flask
  • Java --- 继承
  • Rabbitmq了解
  • 51单片机-LED篇
  • ThreeJS-3D引擎渲染从入门到入土 搞定前端前沿技术
  • chatGPT 会给程序员带来失业潮吗?
  • 2023美赛春季赛F题思路数据代码论文分享
  • 快速搭建python爬虫管理平台
  • 从 JDK 9 到 19,认识一个新的 Java 形态(内存篇)
  • Dell CentOS 环境下安装远程管理命令racadm
  • Java设计模式-4、适配器模式
  • VUE3项目实现动态路由demo
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • exports和module.exports
  • extjs4学习之配置
  • JavaScript-Array类型
  • Linux CTF 逆向入门
  • MaxCompute访问TableStore(OTS) 数据
  • mysql innodb 索引使用指南
  • mysql常用命令汇总
  • STAR法则
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue.js源码(2):初探List Rendering
  • 闭包--闭包之tab栏切换(四)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • ------- 计算机网络基础
  • 算法之不定期更新(一)(2018-04-12)
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ###项目技术发展史
  • #1014 : Trie树
  • (2)nginx 安装、启停
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (TOJ2804)Even? Odd?
  • (二)斐波那契Fabonacci函数
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (七)Knockout 创建自定义绑定
  • (四)Linux Shell编程——输入输出重定向
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)c++ std::pair 与 std::make
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET 分布式技术比较
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • /var/log/cvslog 太大
  • :O)修改linux硬件时间
  • @Bean注解详解
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @EventListener注解使用说明
  • @GetMapping和@RequestMapping的区别
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [1525]字符统计2 (哈希)SDUT