难度:Easy
题目描述
每封电子邮件都由一个本地名称和一个域名组成,以@符号分隔。
例如,在[email protected]中, alice是本地名称,而leetcode.com是域名。
除了小写字母,这些电子邮件还可能包含’,’或’+’。
如果在电子邮件地址的本地名称部分中的某些字符之间添加句点(’.’),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,”[email protected]” 和 “[email protected]”会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)
如果在本地名称中添加加号(’+’),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 [email protected] 将转发到[email protected]。(同样,此规则不适用于域名。)
可以同时使用这两个规则。
给定电子邮件列表emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?
示例
1 | 输入:["[email protected]","[email protected]","[email protected]"] |
提示
- 1 <= emails[i].length <= 100
- 1 <= emails.length <= 100
- 每封emails[i]都包含有且仅有一个 ‘@’ 字符。
解题思路
这个题目比较简单,按照题目中的意思来编程即可。首先每封eamil中仅包含一个’@’字符,那么可以以’@’切分为本地名称和域名,域名无需处理,本地名称首先去除’+’后面的,然后再将’.’去掉,放入set中去重,最后返回set的大小。
具体可参加下面的代码。
解题代码
python31
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Solution:
def numUniqueEmails(self, emails):
"""
:type emails: List[str]
:rtype: int
"""
ans = set()
for email in emails:
local_name, domain_name = email.split('@')
idx = local_name.find('+')
if idx != -1:
local_name = local_name[0:idx]
local_name = local_name.replace('.', '')
ans.add(local_name +'@' + domain_name)
return len(ans)