专栏首页曌的晓痴LeetCode - 独特的电子邮件地址

LeetCode - 独特的电子邮件地址

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/

个人题解:

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;
    }
}

结果:

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

本文分享自微信公众号 - 曌的晓痴(gh_543795945efe)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Leetcode 题解——796/1078

    其实就是判断字符串中是否存在连续的first和second字串,我们将text按照空格split后,依次遍历,如果当前词为first,就看看他的下一个词是不是s...

    出其东门
  • OAuth2.0认证流程是如何实现的?

    大家也许都有过这样的体验,我们登录一些不是特别常用的软件或网站的时候可以使用QQ、微信或者微博等账号进行授权登陆。例如我们登陆豆瓣网的时候,如果不想单独注册豆瓣...

    用户5927304
  • Linux桌面GUI系统的调度器应该怎么做才不卡顿呢?

    关于太古老的故事,我就长话短说,主要是留下个 UNIX进程调度器从何开始 的印象,这样方便我们理解为什么Linux的进程调度器会是现在的这个效果。

    Linux阅码场
  • 咱们从头到尾说一次 Java 垃圾回收

    之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。?

    用户1516716
  • 点云深度学习系列一: PointNet和PointNet++

    前言:,本公众号将持续点云深度学习最近的相关文章,这个系列从CVPR2017的PointNet开始,主要总结顶会的相关文章,不会全文翻译,只总结重要的点。

    点云PCL博主
  • 系列文章(二)| VS2013-MPI v7-静态编译-Boost1.6.1

    7. VS2013-Qt5.5.1-VTK7.0.0-Boost1.6.1-Qhull2015.2-FLANN1.8.4-Eigen3.2.8-OpenNI2....

    点云PCL博主
  • 强化学习读书笔记(1) | Introduction

    强化学习(Reinforcement learning,RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent...

    用户1621951
  • 华为网络工程师 | 四个小技能:双向转发检查BFD、ospf 调用bfd 加快收敛、端口安全、端口镜像

    BFD:Bidirectional Forwarding Detection,双向转发检查

    网络技术联盟站
  • Adam作者大革新, 联合Hinton等人推出全新优化方法Lookahead

    最优化方法一直主导着模型的学习过程,没有最优化器模型也就没了灵魂。好的最优化方法一直是 ML 社区在积极探索的,它几乎对任何机器学习任务都会有极大的帮助。

    机器之心
  • 别眨眼!AI 通过自学秒解魔方,比人类纪录快两倍

    能够将魔方快速复原一直是魔方爱好者乐此不疲的事,目前人类的纪录是3.47秒,由来自中国的杜宇生创造。

    小小詹同学

扫码关注云+社区

领取腾讯云代金券