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

LeetCode - 独特的电子邮件地址

作者头像
晓痴
发布于 2019-08-13 02:52:16
发布于 2019-08-13 02:52:16
1.1K00
代码可运行
举报
文章被收录于专栏:曌的晓痴曌的晓痴
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode - 唯一摩尔斯密码词
LeetCode第804题,难度简单。莫尔斯码,记是记不住的,但是理解还是能够理解的。
晓痴
2019/08/09
4460
LeetCode - 唯一摩尔斯密码词
LeetCode - 数字的补数
原题地址:https://leetcode-cn.com/problems/number-complement/
晓痴
2019/07/24
4580
LeetCode - 数字的补数
​LeetCode刷题实战451:根据字符出现频率排序
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/12/06
2840
脚撕LeetCode(383)Easy
题目地址:https://leetcode-cn.com/problems/ransom-note/submissions/
JathonKatu
2021/06/10
2710
【算法千题案例】每日一练LeetCode打卡——108.独特的电子邮件地址
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@'符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或'+' 。
呆呆敲代码的小Y
2022/01/25
8600
【算法千题案例】每日一练LeetCode打卡——108.独特的电子邮件地址
LeetCode 929. Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign.
Angel_Kitty
2018/12/27
5360
笨方法刷 leetcode(一)
最近在看leetcode,并且正在上面刷一些简单级别的题目(不过说真的,这些题真的简单吗??或许是我太菜,有些感觉也很难
冰霜
2022/03/19
6220
笨方法刷 leetcode(一)
LeetCode 929. 独特的电子邮件地址
例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。
Michael阿明
2020/07/13
8590
LeetCode - 最长公共前缀
LeetCode第14题,难度简单。将近两年以前做的题目了,回头看说不定会有新的做题思路。
晓痴
2019/08/22
5600
LeetCode - 最长公共前缀
LeetCode通关:连刷十四题,回溯算法完全攻略
例如我们在查找二叉树所有路径的时候,查找完一个路径之后,还需要回退,接着找下一个路径。
三分恶
2021/09/23
1K0
LeetCode通关:连刷十四题,回溯算法完全攻略
LeetCode 721.账户合并 - JavaScript
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是名称 (name),其余元素是 emails 表示该帐户的邮箱地址。
心谭博客
2020/04/21
7500
leetcode201场周赛
T1:整理字符串,T2:找出第N个二进制字符串中的第K位, T3:和为目标值的最大数目不重叠非空子数组数目,T4:切棍子的最小成本(区间dp)
你的益达
2020/08/11
6120
LeetCode - 键盘行
原题地址:https://leetcode-cn.com/problems/keyboard-row/
晓痴
2019/07/24
4090
LeetCode - 键盘行
014. 最长公共前缀 | Leetcode题解
解题思路,很容易想到的是我们将第一个字符串A和第二个字符串B求公共前缀,然后在和第三个字符串C求公共前缀,最终得到最长公共前缀。解题重点是求两个字符串求公共前缀。比较常见的想法是如果这两个字符串的第一个字符相同则记录第一个字符,第二个相同则增加第二个,直到出现不同的字符串。但是在这个思路上有一个难点,我们在和C串求前缀的时候,会重新从第一个字符开始记录,增加不必要的计算。第二个思路就是将A串作为前缀,如果与B串前面字符不同,则去掉最后一个字符重新和B串匹配,直到字符完全匹配B串,在python中,s = s[:-1]很容易去掉最后一个字符。实现如下:
苏南
2020/12/16
4800
014. 最长公共前缀 | Leetcode题解
Leetcode93. 复原IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
一个会写诗的程序员
2020/04/30
5600
LeetCode-14 最长公共前缀
今天我们学习第14题最长公共前缀,这是一道简单题。像这样字符串的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。
用户3470542
2019/06/26
4550
LeetCode-14 最长公共前缀
LeetCode 721. 账户合并(并查集)
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址。
Michael阿明
2021/02/19
3190
边做算法边学go语言之LeetCode1160:拼写单词
题目位置:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters 题集:https://leetcode-cn.com/problemset/all/ 项目位置:https://github.com/pzqu/LeetCode
机智的程序员小熊
2020/03/25
3600
刷题记录(LeetCode 100 热题系列)2
无重复字符的最长子串 LeetCode url (https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/)
猎户星座1
2021/01/17
3280
LeetCode - 电话号码的字母组合
原题地址:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
晓痴
2019/07/24
5860
LeetCode - 电话号码的字母组合
相关推荐
LeetCode - 唯一摩尔斯密码词
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验