【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 <= 100
1 <= 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 ...
随机推荐
- java isAssignableFrom instanceof 小结 专题
一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. public native boolean isAssignabl ...
- zTree树插件动态加载
需求: 由于项目中家谱图数据量超大,而一般加载方式是通过,页面加载时 zTree.init方法进行数据加载,将所有数据一次性加载到页面中.而在项目中家谱级别又非常广而深,成千上万级,因此一次加载,完全 ...
- datagrid数据网格获取所有选中行的索引,插入某个列值为其他列的运算值
获取所有选中行的索引,存入数组ary中: var data=$("#dg").datagrid("getSelections"); var ary=[]; fo ...
- js如何调用电脑的摄像头
闲来无事,用js写了一个调用摄像头的demo,并用canvas显示保存.这个功能很实用,比如上传用户的头像,即时拍照及时上传. Html: <video width="200px&qu ...
- Android开发笔记(一百四十三)任务调度JobScheduler
Android开发笔记(一百四十三)任务调度JobScheduler
- Windows系统下如何优化Android Studio
Android Studio将是Android开发大势所趋. 安装Android Studio时需注意的细节: · 找到安装目录bin目录下idea.properties 最后一行加入: dis ...
- APP弱网测试点
- LINUX提高openfire并发数(网上收集)
谷歌博客地址:http://tsaiquinn.blogspot.com/2014/10/linuxopenfire.html 影响连接数的元素包含三种:1)Linux的系统参数2)进程自身可以创建的 ...
- java+spring 执行器
A 通过MethodInvokingJobDetailFactoryBean类实现 spring配置文件里增加执行器配置 <bean id="ammoDue" class=& ...
- (四)mybatis之mybatis初了解
前言:终于到mybatis啦! Mybatis 前文有提到,Hibernate采用的是全表映射的方式,而这方式恰恰使得性能变得较差(https://www.cnblogs.com/NYfor201 ...