更多精彩內容,請關注【力扣簡單題】。
題目
難度:★★☆☆☆
類型:字符串
每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。
例如,在 alice@leetcode.com中, alice 是本地名稱,而 leetcode.com 是域名。
除了小寫字母,這些電子郵件還可能包含 '.' 或 '+'。
如果在電子郵件地址的本地名稱部分中的某些字符之間添加句點('.'),則發(fā)往那里的郵件將會轉發(fā)到本地名稱中沒有點的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 會轉發(fā)到同一電子郵件地址。 (請注意,此規(guī)則不適用于域名。)
如果在本地名稱中添加加號('+'),則會忽略第一個加號后面的所有內容。這允許過濾某些電子郵件,例如 m.y+name@email.com 將轉發(fā)到 my@email.com。 (同樣,此規(guī)則不適用于域名。)
可以同時使用這兩個規(guī)則。
給定電子郵件列表 emails,我們會向列表中的每個地址發(fā)送一封電子郵件。實際收到郵件的不同地址有多少?
提示
1 <= emails[i].length <= 100
1 <= emails.length <= 100
每封 emails[i] 都包含有且僅有一個 '@' 字符。
示例
輸入:["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"。
解答
這是字符串處理的基礎題,首先我們定義一個函數,實現簡化郵箱的功能:
將輸入郵箱用“@”劃分成本地名和域名兩部分;
對于本地名,將所有“.”符號全部刪除;
對于本地名,將第一次出現的“+”及其后面的所有字符串刪除;
返回處理后的本地名與域名合并而成的新郵箱。
我們使用集合來統(tǒng)計郵箱的不同種類。
class Solution:
def numUniqueEmails(self, emails):
"""
:param emails: List[str]
:return: int
"""
def simplify(email):
local, domain = email.split('@')
local = local.replace('.', '')
local = local.split('+')[0]
return local + '@' + domain
return len(set(simplify(email) for email in emails))
如有疑問或建議,歡迎評論區(qū)留言~