前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 独特的电子邮件地址

LeetCode - 独特的电子邮件地址

作者头像
晓痴
发布2019-08-13 10:52:16
9490
发布2019-08-13 10:52:16
举报
文章被收录于专栏:曌的晓痴

LeetCode第929题,难度简单。三个半月之前的题目了,最近只能够选择周末做题,然后一次性把一周的题目都写完,然后每天回家定时发送

原题地址:https://leetcode-cn.com/problems/unique-email-addresses/

题目描述

简单阐述下本题的一个题目概要:

给你一个字符串数组,每个字符串都是一个邮件地址,然后每个邮件地址里面都可能会有'.''+'。邮件地址分为两部分,'@'前面的叫做本地名称,后面的称为域名。

如果本地名称包含'.',则该地址还是会发往没有去掉点'.'的那个地址。

如果本地名称包含'+',则'+'后面的内容将会被忽略。

题目有以下三个条件

  1. 1 <= emails[i].length <= 100
  2. 1 <= emails.length <= 100
  3. 每封 emails[i] 都包含有且仅有一个 '@' 字符

解题思路:

这题其实挺简单的,题目很简单,但是代码写起来会有点长。

首先遍历所有的邮件列表,每个邮件地址的每个字符都遍历过去,判断其中的符号,即加号'+', 艾特'@', 点号'.',根据规则,分别对这三个符号做特殊处理。@之前的就是前缀,之后的就是后缀,一个前缀可以对应多个后缀。

最后统计每个前缀对应的后缀数量,就可以了。

中文官网题解:

https://leetcode-cn.com/problems/unique-email-addresses/solution/

个人题解:

代码语言:javascript
复制
class Solution {
    public int numUniqueEmails(String[] emails) {
         Map<String, Set<String>> map = new HashMap<>();
        for (String email : emails) {
            char[] chars = email.toCharArray();
            StringBuilder stringBuilder = new StringBuilder();
            boolean plus = false;
            for (int i = 0; i < chars.length; i++) {
                if (plus && chars[i] != '@') {
                    continue;
                }
                if (chars[i] == '.') {
                    continue;
                }
                if (chars[i] == '+') {
                    if (plus) {
                        continue;
                    } else {
                        plus = true;
                        continue;
                    }
                }
                if (chars[i] == '@') {
                    Set<String> list = map.get(stringBuilder.toString());
                    if (list == null) {
                        list = new HashSet<>();
                    }
                    list.add(email.substring(i + 1));
                    map.put(stringBuilder.toString(), list);
                    break;
                }
                stringBuilder.append(chars[i]);
            }
        }
        int count = 0;
        for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
            count += entry.getValue().size();
        }
        return count;
    }
}

结果:

运行结果还可以,虽然不是最快,但也差不多了。鼓掌

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档