【LeetCode】Unique Email Addresses(独特的电子邮件地址)
这道题是LeetCode里的第929道题。
题目要求:
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。
例如,在
alice@leetcode.com中,alice是本地名称,而leetcode.com是域名。除了小写字母,这些电子邮件还可能包含
'.'或'+'。如果在电子邮件地址的本地名称部分中的某些字符之间添加句点(
'.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com”和“alicez@leetcode.com”会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)如果在本地名称中添加加号(
'+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如m.y+name@email.com将转发到my@email.com。 (同样,此规则不适用于域名。)可以同时使用这两个规则。
给定电子邮件列表
emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?示例:
输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
提示:
1 <= emails[i].length <= 1001 <= emails.length <= 100- 每封
emails[i]都包含有且仅有一个'@'字符。
这道题目很简单,对@前的特殊字符进行 if 条件转移就大功告成了。
解题代码:
static const int _ = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}();
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
vector<string>save;
string str;
int i,j,flag;
//save.push_back(str);//想不起来有什么作用了
for(i=0;i<emails.size();i++){
flag=0;
for(j=0;j<emails[i].length();j++){
if(emails[i][j]=='.')continue;
else if(emails[i][j]=='@')break;
else if(emails[i][j]=='+'){
while(emails[i][j]!='@')
j++;
break;
}
else str.push_back(emails[i][j]);
}
j++;
for(;j<emails[i].length();j++)
str.push_back(emails[i][j]);
for(int k=0;k<save.size();k++)
if(save[k]==str)flag=1;
if(flag==0)save.push_back(str);
str.clear();
}
return save.size()-1;
}
};
提交结果:

个人总结:
之前写的代码,可以优化,可以把结果保存在一个 set 里面,简化代码。最简代码:
static int desyncio = []() {
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}();
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
unordered_set<string> set;
for (auto &s : emails) {
unsigned int p, a;
while (p = s.find('.'), a = s.find('@'), p != std::string::npos && p < a)
s.erase(p, 1);
if (p = s.find('+'), a = s.find('@'), p != std::string::npos && p < a)
s.erase(p, a - p);
set.insert(s);
}
return set.size();
}
};
最最最实用的方法(并不是):正则表达式。
public static int numUniqueEmails(String[] emails) {
return (int)Arrays.stream(emails).map(a1 ->{
a1 = a1.replaceAll("\\+.*@", "@");
while(a1.matches(".*\\..*@.*")) {
a1 = a1.replaceFirst("\\.","");
}
return a1;
}).distinct().count();
}
运行结果:

还行吧。
【LeetCode】Unique Email Addresses(独特的电子邮件地址)的更多相关文章
- Leetcode929.Unique Email Addresses独特的电子邮件地址
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔. 例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名. 除了小写字母,这些电 ...
- LeetCode 929. Unique Email Addresses (独特的电子邮件地址)
题目标签:String 题目说明 有两个规则针对于 local name. 所以先把local name 和 domain name 分开. 两个规则是: rule 1:'.' 会被去除. (利用re ...
- [LeetCode] 929. Unique Email Addresses 独特的邮件地址
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- LeetCode - Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- [Swift]LeetCode929. 独特的电子邮件地址 | Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- leetCode 929 独特的电子邮件地址
题目: 每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔. 例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名. 除了小写字母 ...
- [leetcode] 929. Unique Email Addresses (easy)
统计有几种邮箱地址. 邮箱名类型:local@domain 规则:1. local中出现"."的,忽略. a.bc=abc 2. local中出现"+"的,+以 ...
- leetcode929 Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- 929. Unique Email Addresses
929. Unique Email Addresses Easy 22766FavoriteShare Every email consists of a local name and a domai ...
随机推荐
- Linux 安装reids
1.下载: wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2.解压: .tar.gz 3.安装: cd /redis- make ...
- AJPFX关于延迟加载的单例模式的安全问题解决
请写一个延迟加载的单例模式?写懒汉式:当出现多线程访问时怎么解决?加同步,解决安全问题:效率高吗?不高:怎样解决?通过双重判断的形式解决.懒汉式:延迟加载方式.当多线程访问懒汉式时,因为懒汉式的方法内 ...
- Hadoop集群_VSFTP安装配置
原作者写的太好了,我这个菜鸟不自觉就转载了,原文链接:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503864.html 如果,您认为阅读这 ...
- EJB2.0版本的HelloWorld
EJB2.0版本的HelloWorld 虽然EJB3.1已经出来了,可是EJB2.0的项目还需要维护啊.下面写个简单EJB2.0的HelloWorld程序,练练手. 环境: JBoss 4.0 ...
- Git和SVN的5个基本区别
如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...
- 关于ubuntu终端全屏的时候不能显示底部
最近在win7的电脑上装了ubuntu,也就是双系统.打算之后工作就直接进入ubuntu,减少之前win7和虚拟机之间的切换.进入ubuntu后,发现一个奇怪的问题是,在终端全屏的时候,底部总是有几行 ...
- ARC和MRC混合模式下的编译问题
在一个支持ARC (Automatic Reference Counting)的项目中,有时候需要禁止其中几个文件使用ARC模式编译(比如你用了第三方不支持ARC的类库).这时就要点击工程文件,在ta ...
- uva12264 Risk
最小值最大,就二分判断. map[i] = '0'+map[i];这样更方便 每个点拆成i,i’, S连i,cap为a[i],i’连T,cap为1(保证至少剩一个)或mid. i,i’ ,a[i] ...
- iOS 设计模式
很赞的总结 iOS Design Patterns 中文版 IOS设计模式之一(MVC模式,单例模式) IOS设计模式之二(门面模式,装饰器模式) IOS设计模式之三(适配器模式,观察者模式) IOS ...
- 简单jQuery图片自适应宽度插件jQuery.imgAutoSize.js
(function ($) { var loadImg = function (url, fn) { var img = new Image(); img. ...