【刷题日记】929. 独特的电子邮件地址

简介: 本次刷题日记的第 54 篇,力扣题为:929. 独特的电子邮件地址,中等

本次刷题日记的第 54 篇,力扣题为:929. 独特的电子邮件地址中等

一、题目描述:

image.png

来了解一个电子邮件的题目,虽然题目不难,但是也可以普及一下邮件的一些基本知识点


二、这道题考察了什么思想?你的思路是什么?

题目给我们普及了一个关于邮件的基本知识:

  • 邮件字符串的组成部分为 本地名 + @ + 域名
  • 其中本地名如果有 . ,会被直接忽略,若在本地名中有 + ,则 + 后面的到 @ 前的字符串都会被直接忽略掉,当然,也包括 + 也会被直接忽略掉

分析

image.png

如上图展示的,当我们了解了邮件字符串的这个基本原理之后,我们处理起来就会非常明确和得心应手了

  • 找到 @ 前的字符串,也就是邮件的本地名,我们可以通过字符串切割的方式来进行处理即可,每一种语言都会有字符串的公共库,除非用 C 语言自己一个字符一个字符的去偏移
  • 处理 . ,处理本地名的时候,同样也是通过字符串的库找到 . 的位置,然后将其替换成空白,相当于去掉这个字符串
  • 处理 + ,同理,在本地名中找到 + 的位置,将其位置到本地名的结束位置涉及的字符串包含 + ,全部干掉即可
  • 最后将处理后的本地名,与原字符串中 @ 后面的字符串拼接起来,就可以找到实际的字符串了

image.png

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

上面描述的处理逻辑已经很清楚了,我们重点要注意本地名的 . 和的情况, 和 + 的情况进行分类处理即可,关于计算不同邮件域名的个数,我们可以使用 hash 表来进行处理

编码如下:

func numUniqueEmails(emails []string) int {
    help := map[string]struct{}{}
    for _, e := range emails {
        i := strings.IndexByte(e, '@')
        tmp := strings.SplitN(e[:i], "+", 2)[0]
        tmp = strings.ReplaceAll(tmp, ".", "")  
        help[tmp+e[i:]] = struct{}{}
    }
    return len(help)
}

四、总结:

image.png

可以看出我们这种简单实现的方式,时间复杂度与题目给出的 emails 的元素长度有关系,则时间复杂度实际上是 O(N) ,这个 N 指的就是 email 的长度

那么空间复杂度也是 O(N) ,因为咱们开辟了一个 哈希表,占用的空间最大的情况就是哈希表的长度等于 emails 的长度

原题地址:929. 独特的电子邮件地址

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
不要等到被抄袭才想到保护原创产品设计
对于您的每一件原创产品,都建议申请一个外观专利。
100 0
LeetCode每日一题——929. 独特的电子邮件地址
每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 ‘@’ 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 ‘.’ 或 ‘+’ 。
86 0
|
人工智能 物联网 云栖大会
开发者小宝探展日记 第1天
来看看云栖大会D2馆开发者基地的精彩内容
开发者小宝探展日记 第1天
|
机器学习/深度学习 编解码 人工智能
CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等
CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等
CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等
|
算法
数据结构与算法题目集(中文) - 7-14 电话聊天狂人(25 分)
数据结构与算法题目集(中文) - 7-14 电话聊天狂人(25 分)
158 0
|
编译器 API 开发工具
倍福Ethercat学习日记
倍福Ethercat学习日记
|
前端开发 数据安全/隐私保护
❤掌控web表单功能深入交流❤
❤掌控web表单功能深入交流❤
152 0
❤掌控web表单功能深入交流❤
|
存储 SQL 程序员
|
程序员
|
存储 设计模式 Java