LeetCode.927-独特邮箱地址(Unique Email Addresses)
这是悦乐书的第356次更新,第383篇原创
01看题和准备
今天介绍的是LeetCode算法题中Easy级别的第218题(顺位题号是927)。每封电子邮件都包含本地名称和域名,以@符号分隔。
例如,在alice@leetcode.com中,alice是本地名称,leetcode.com是域名。
除了小写字母,这些电子邮件可能包含'.'或'+'。
如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则在那里发送的邮件将转发到本地名称中没有点的同一地址。例如,“alice.z@leetcode.com”和“alicez@leetcode.com”转发到同一个电子邮件地址。(请注意,此规则不适用于域名。)
如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如m.y+name@email.com将转发到my@email.com。(同样,此规则不适用于域名。)
可以同时使用这两个规则。
给定电子邮件列表,我们会向列表中的每个地址发送一封电子邮件。有多少不同的地址实际接收邮件?例如:
输入:[“test.email+alex@leetcode.com”,“test.e.mail+bob.cathy@leetcode.com”,
“testemail+david@lee.tcode.com”]
输出:2
说明:“testemail@leetcode.com”和“testemail@lee.tcode.com”实际收到邮件
注意:
1 <= emails[i].length <= 100
1 <= emails.length <= 100
每封
emails[i]都包含一个'@'字符。所有本地名称和域名都是非空的。
本地名称不以
“+”字符开头。
02 第一种解法
根据题目给的规则,对字符串分两段处理,在本地名称中,如果存在+号,就截取+号前的字符串,变成新的本地名称,如果遇到点号,就将点号全部替换,得到新的本地名称,再和域名部分拼接在一起,存入HashSet中,返回HashSet的size即可。
public int numUniqueEmails(String[] emails) {
Set<String> set = new HashSet<String>();
for (String email : emails) {
String tem = email;
int index = tem.indexOf('@');
// 截取@之前的字符串
tem = tem.substring(0, index);
// 有'+',就再截取'+'号之前的字符串
if (tem.indexOf('+') > 0) {
tem = tem.substring(0, tem.indexOf('+'));
}
// 将所有点号替换
tem = tem.replace(".", "");
// 将@符号前的新字符串和原字符串@符号后的域名拼接
// 存入HashSet
set.add(tem+email.substring(index));
}
return set.size();
}
03 第二种解法
我们也可以不使用字符串截取、替换等方法,直接对字符进行判断,然后拼接成新的email地址,最后存入HashSet中,返回HashSet的size即可。
public int numUniqueEmails2(String[] emails) {
Set<String> set = new HashSet<String>();
for (String email : emails) {
set.add(handleEmail(email));
}
return set.size();
}
public String handleEmail(String email) {
StringBuilder sb = new StringBuilder();
int n = email.length();
// 是否遇到@符号
boolean flag = false;
for (int i=0; i<n; i++) {
char c = email.charAt(i);
if (!flag) {
//没遇到@符号前,遇到.号一律 跳过
if (c == '.') {
continue;
}
//遇到+号,往后跳一位,开始寻找@符号
if (c == '+') {
i++;
while (i < n && email.charAt(i) != '@') {
i++;
}
c = email.charAt(i);
// 已经遇到@符号
flag = true;
} else if(c == '@'){
// 没遇到+号,却遇到@符号了
flag = true;
}
}
sb.append(c);
}
return sb.toString();
}
04 小结
算法专题目前已连续日更超过六个月,算法题文章224+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode.927-独特邮箱地址(Unique Email Addresses)的更多相关文章
- [Swift]LeetCode929. 独特的电子邮件地址 | Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- [leetcode] 929. Unique Email Addresses (easy)
统计有几种邮箱地址. 邮箱名类型:local@domain 规则:1. local中出现"."的,忽略. a.bc=abc 2. local中出现"+"的,+以 ...
- 929. Unique Email Addresses
929. Unique Email Addresses Easy 22766FavoriteShare Every email consists of a local name and a domai ...
- 【Leetcode_easy】929. Unique Email Addresses
problem 929. Unique Email Addresses solution: class Solution { public: int numUniqueEmails(vector< ...
- [LeetCode] 929. Unique Email Addresses 独特的邮件地址
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- [LeetCode] 929. Unique Email Addresses 唯一的电邮地址
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- 【LeetCode】929. Unique Email Addresses 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 set + 字符串操作 参考资料 日期 题目地址:h ...
- LeetCode 929 Unique Email Addresses 解题报告
题目要求 Every email consists of a local name and a domain name, separated by the @ sign. For example, i ...
- LeetCode 929.Unique Email Addresses
Description Every email consists of a local name and a domain name, separated by the @ sign. For exa ...
随机推荐
- Spring EntityResolver ".dtd" 和 ".xsd"检验
XmlBeanDefinitionReader 加载xml EntityResolver entityResolver; ErrorHandler errorHandler = new SimpleS ...
- HihoCoder1087Hamiltonian Cycle(DP状态压缩)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given a directed graph containing n vertice (numbered from 1 ...
- PMBOK :美国的项目管理知识体系
PMBOK 是Project Management Body Of Knowledge的缩写, 指项目管理知识体系的意思,具体是美国项目管理协会(PMI)对项目管理所需的知识.技能和工具进行的概括性描 ...
- 理解 Cookie、Session、Token
发展史 Cookie Session Token Token的起源 基于服务器的验证 基于服务器验证方式暴露的一些问题 基于Token的验证原理 Tokens的优势 发展史 1.很久很久以前,Web ...
- window下,nodejs安装http-server,并开启HTTP服务器
1.下载nodejs 官方下载地址:https://nodejs.org/en/ 2.在cmd命令中,输入node -v 输入出版本号,代表安装成功. 3.输入 npm install http-s ...
- sqlite3创建自增主键,以及清空表使自增列归零
1.创建自增主键 CREATE TABLE tb_python (ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE TEXT,URL TEXT); 2.清空表 SQ ...
- C# 扩展、常用方法
项目基本做完了,抽空整理下里面用到的扩展方法,以及复用度很高的代码,省的以后到处去找. 一.C#扩展方法——Distinct去重 二.C#扩展方法——获得枚举Description 三.C#扩展方法— ...
- getch和getchar的区别
造冰箱的大熊猫@cnblogs 2018/11/30 1.getc() 头文件:stdio.h 函数声明:int getc ( FILE * stream ); 功能: - 返回流(stream)当前 ...
- 堤堤云海外IDC
http://www.ddyidc.com 堤堤云网络全球互联 堤堤云网络致力为客户提供优质的海外服务器租用服务,各种专线解决方案. 产品分类:服务器租用.IP租用.托管.专线传输.防御.优质回国CN ...
- 二级索引-phoenix-单机部署
下载 从下载地址下下载以下对应hbase版本的版本: phoenix-4.7.0-HBase-1.0/bin/phoenix-4.7.0-HBase-1.0-bin.tar.gz 安装部署 解压 ta ...