# 929. Unique Email Addresses

## Problem 929

[https://leetcode.com/problems/unique-email-addresses/](https://leetcode.com/problems/unique-email-addresses/)

Every email consists of a local name and a domain name, separated by the @ sign.For example, in `alice@leetcode.com`, `alice` 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?&#x20;

**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
```

## Solution

先以題目規則去處理每一個 email\
再使用 set() 去過濾重複

{% tabs %}
{% tab title="loop" %}
```python
class Solution:
    def numUniqueEmails(self, emails: List[str]) -> int:
        
        unique = set()
        
        for email in emails:
            [localname, domainname] = email.split("@")
            localname = "".join(localname.split("+")[0].split("."))

            unique.add(localname+domainname)
        
        return len(unique)
```
{% endtab %}

{% tab title="map" %}
```python
class Solution:
    def numUniqueEmails(self, emails: List[str]) -> int:
        
        return len( set( map( self.process_email, emails ) ) )
    
    def process_email( self, email ):
        [localname, domainname] = email.split("@")
        localname = "".join(localname.split("+")[0].split("."))
        
        return (localname+"@"+domainname)
```
{% endtab %}
{% endtabs %}
