LeetCode面试算法-力扣 929. 独特的电子邮件地址

929. 独特的电子邮件地址

题目描述
    每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。例如,在 [email protected]中,alice 是本地名称,而 leetcode.com 是域名。除了小写字母,这些电子邮件还可能包含 '.' 或 '+'。

    ①如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"[email protected]” 和 “[email protected]” 会转发到同一电子邮件地址。(请注意,此规则不适用于域名。)        ②如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如[email protected] 将转发到 [email protected]。(同样,此规则不适用于域名。)

    可以同时使用这两个规则。给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?

说明:1 <= emails[i].length <= 100;1 <= emails.length <= 100;每封 emails[i] 都包含有且仅有一个 '@' 字符。


示例:
    输入:["[email protected]","[email protected]","[email protected]"]
    输出:2
    解释:实际收到邮件的是 "[email protected]" 和 "[email protected]"。


分析:使用HashSet来存放结果集,HashSet不允许集合中出现重复元素,通过split()方法根据@字符将emails字符串分割成字符串数组,replaceAll("\\.", "")方法将 . 字符替换为空字符,找到 + 字符的下标,返回子字符串substring(0, index),最后拼接字符串,返回set.size()即实际有效邮件地址数目。

 


class Solution {
    public int numUniqueEmails(String[] emails) {
        Set set = new HashSet();
        for (int i = 0; i < emails.length; i++) {
            String[] strs = emails[i].split("@");
            String left = strs[0].replaceAll("\\.", "");
            int index = left.indexOf("+");
            if (index > 0)
                left = left.substring(0, index);
            set.add(left + "@" + strs[1]);
        }
        return set.size();
    }
}

你可能感兴趣的:(JavaStudy,LeetCode-面试-算法)