Every email consists of a local name and a domain name, separated by the @ sign.

For example, in alice@leetcode.comalice is the local name, and leetcode.com is the domain name.

Besides lowercase letters, these emails may contain '.'s or '+'s.

If you add periods ('.') between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name.  For example, "alice.z@leetcode.com" and "alicez@leetcode.com"forward to the same email address.  (Note that this rule does not apply for domain names.)

If you add a plus ('+') in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered, for example m.y+name@email.com will be forwarded to my@email.com.  (Again, this rule does not apply for domain names.)

It is possible to use both of these rules at the same time.

Given a list of emails, we send one email to each address in the list.  How many different addresses actually receive mails?

Example 1:

Input: ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
Output: 2
Explanation: "testemail@leetcode.com" and "testemail@lee.tcode.com" actually receive mails

Note:

  • 1 <= emails[i].length <= 100
  • 1 <= emails.length <= 100
  • Each emails[i] contains exactly one '@' character.
  • All local and domain names are non-empty.
  • Local names do not start with a '+' character.
 解法:根据题目要求,直接在@处分解email,把local name中的'.'和'+'之后的字符去掉,在和domain拼接成email地址,然后存进set,set可以去重,最后返回set的长度。
Java:
public int numUniqueEmails(String[] emails) {
Set<String> normalized = new HashSet<>(); // used to save simplified email address, cost O(n) sapce.
for (String email : emails) {
String[] parts = email.split("@"); // split into local and domain parts.
String[] local = parts[0].split("\\+"); // split local by '+'.
normalized.add(local[0].replace(".", "") + "@" + parts[1]); // remove all '.', and concatenate '@' and domain.
}
return normalized.size();
}  

Python:

class Solution:
def numUniqueEmails(self, emails):
"""
:type emails: List[str]
:rtype: int
"""
email_set = set()
for email in emails:
local_name,domain_name = email.split("@")
local_name ="".join(local_name.split('+')[0].split('.'))
email = local_name +'@' + domain_name
email_set.add(email)
return len(email_set)

Python: wo

class Solution(object):
def numUniqueEmails(self, emails):
"""
:type emails: List[str]
:rtype: int
"""
ans = set()
for email in emails:
split_names = email.split('@')
local_name = split_names[0]
domain_name = split_names[1]
local_name_remove_plus = local_name.split('+')[0]
local_name_split_dot = local_name_remove_plus.split('.')
local_name = ('').join(local_name_split_dot)
new_email = local_name + '@' + domain_name
ans.add(new_email)
return len(ans)

C++:

class Solution
{
public: using Emails = vector< string >;
using Unique = unordered_set< string >; int numUniqueEmails( Emails& emails, Unique unique={} )
{
for( auto& e: emails )
{
auto pivot = e.find_first_of( '@' );
auto name = e.substr( 0, pivot ),
domain = e.substr( pivot );
name.erase( remove( name.begin(), name.end(), '.' ), name.end() );
auto pos = name.find_first_of( '+' );
unique.insert( ( pos != string::npos )? name.erase( pos ) + domain : name + domain );
}
return static_cast< int >( unique.size() );
} };

  

  

  

All LeetCode Questions List 题目汇总

[LeetCode] 929. Unique Email Addresses 唯一的电邮地址的更多相关文章

  1. [leetcode] 929. Unique Email Addresses (easy)

    统计有几种邮箱地址. 邮箱名类型:local@domain 规则:1. local中出现"."的,忽略. a.bc=abc 2. local中出现"+"的,+以 ...

  2. [LeetCode] 929. Unique Email Addresses 独特的邮件地址

    Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...

  3. LeetCode 929.Unique Email Addresses

    Description Every email consists of a local name and a domain name, separated by the @ sign. For exa ...

  4. LeetCode 929 Unique Email Addresses 解题报告

    题目要求 Every email consists of a local name and a domain name, separated by the @ sign. For example, i ...

  5. LeetCode 929. Unique Email Addresses (独特的电子邮件地址)

    题目标签:String 题目说明 有两个规则针对于 local name. 所以先把local name 和 domain name 分开. 两个规则是: rule 1:'.' 会被去除. (利用re ...

  6. 929. Unique Email Addresses

    929. Unique Email Addresses Easy 22766FavoriteShare Every email consists of a local name and a domai ...

  7. 【Leetcode_easy】929. Unique Email Addresses

    problem 929. Unique Email Addresses solution: class Solution { public: int numUniqueEmails(vector< ...

  8. 【leetcode】929. Unique Email Addresses

    题目如下: Every email consists of a local name and a domain name, separated by the @ sign. For example, ...

  9. 【LeetCode】929. Unique Email Addresses 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 set + 字符串操作 参考资料 日期 题目地址:h ...

随机推荐

  1. 微服务学习之路(三)——实现RPC远程服务调用

    RPC(Remote Producedure Call)调用原理:服务消费者称为客户端,服务提供者称为服务端,处于不同网络地址,需要建立网络连接.建立连接后,双方还必须按照某种约定的协议进行网络通讯— ...

  2. TCP滑动窗口(发送窗口和接受窗口)

    TCP窗口机制 TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口.用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的. 其实TCP在整个发送过程中, ...

  3. 珠峰培训node正式课--【笔记】|全局对象 | process | util | fs | stream 流

    全局对象: console  : __filename     ; __dirname     ; setTimeOut     ; setImmediate(把参数函数放在下一个环节执行) proc ...

  4. uiwebview 离线缓存 图片

    uiwebview 离线缓存图片

  5. LeetCode 1197. Minimum Knight Moves

    原题链接在这里:https://leetcode.com/problems/minimum-knight-moves/ 题目: In an infinite chess board with coor ...

  6. 【转载】java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider

    https://blog.csdn.net/zqz_zqz/article/details/80922164 window上运行以下代码获取jvm进程: List<VirtualMachineD ...

  7. C# 其它模拟延迟

    System.Threading.Thread.Sleep(3000);//模拟延迟 如模拟上传图片等

  8. A1136 | 字符串处理、大整数运算

    题目链接: https://www.patest.cn/contests/pat-a-practise/1136 今天是12月17号.最近这几天都有点不在状态.已经整整一周没有练算法了,自从12.3考 ...

  9. bzoj3073: [Pa2011]Journeys 线段树优化建图

    bzoj3073: [Pa2011]Journeys 链接 BZOJ 思路 区间和区间连边.如何线段树优化建图. 和单点连区间类似的,我们新建一个点,区间->新点->区间. 又转化成了单点 ...

  10. 洛谷 P3371【模板】单源最短路径(弱化版)

    题面 既然是模板, 那就直接贴代码? 两种思路 1.迪杰斯特拉 #include <cstdio> #include <cstring> #include <iostre ...