All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0901_1000.s0929_unique_email_addresses.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0901_1000.s0929_unique_email_addresses;

// #Easy #Array #String #Hash_Table #2022_03_29_Time_10_ms_(92.59%)_Space_45.3_MB_(79.48%)

import java.util.HashSet;
import java.util.Set;

/**
 * 929 - Unique Email Addresses\.
 *
 * Easy
 *
 * Every **valid email** consists of a **local name** and a **domain name** , separated by the `'@'` sign. Besides lowercase letters, the email may contain one or more `'.'` or `'+'`.
 *
 * *   For example, in `"[email protected]"`, `"alice"` is the **local name** , and `"leetcode.com"` is the **domain name**.
 *
 * 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. Note that this rule **does not apply** to **domain names**.
 *
 * *   For example, `"[email protected]"` and `"[email protected]"` forward to the same email address.
 *
 * 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. Note that this rule **does not apply** to **domain names**.
 *
 * *   For example, `"[email protected]"` will be forwarded to `"[email protected]"`.
 *
 * It is possible to use both of these rules at the same time.
 *
 * Given an array of strings `emails` where we send one email to each `emails[i]`, return _the number of different addresses that actually receive mails_.
 *
 * **Example 1:**
 *
 * **Input:** emails = ["[email protected]","[email protected]","[email protected]"]
 *
 * **Output:** 2
 *
 * **Explanation:** "[email protected]" and "[email protected]" actually receive mails.
 *
 * **Example 2:**
 *
 * **Input:** emails = ["[email protected]","[email protected]","[email protected]"]
 *
 * **Output:** 3
 *
 * **Constraints:**
 *
 * *   `1 <= emails.length <= 100`
 * *   `1 <= emails[i].length <= 100`
 * *   `emails[i]` consist of lowercase English letters, `'+'`, `'.'` and `'@'`.
 * *   Each `emails[i]` contains exactly one `'@'` character.
 * *   All local and domain names are non-empty.
 * *   Local names do not start with a `'+'` character.
 * *   Domain names end with the `".com"` suffix.
**/
public class Solution {
    public int numUniqueEmails(String[] emails) {
        Set set = new HashSet<>();
        for (String s : emails) {
            StringBuilder sb = new StringBuilder();
            int i = 0;
            while (i < s.length()) {
                char c = s.charAt(i);
                if (c == '+' || c == '@') {
                    sb.append('@');
                    i = s.indexOf("@") + 1;
                    sb.append(s.substring(i));
                    break;
                } else if (c != '.') {
                    sb.append(c);
                }
                i++;
            }
            set.add(sb.toString());
        }
        return set.size();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy