【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 ...
随机推荐
- 对象(Object)和类(Class)的关系?
对象属于某一类,即对象是某一个类的实例.例如: Public Class Flight Private _name As String Public Property Name As String G ...
- dos命令安装windows服务
以下两种方法都是通过dos命令创建windows服务 1.创建服务 sc create UploadRealVolumeService start= auto binpath= C:\Users\Ad ...
- threadLocal遇上线程池导致局部变量变化
这两天一直在查无线app一个诡异的问题,表象是stg的接口返回数据,和线上接口的返回数据不一致. 1.初步判断:有缓存,查看代码后发现缓存时间直邮6分钟,而且同一个接口,其他调用方的返回数据,stg和 ...
- SQLServer查询死锁
--查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys ...
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M ...
- UVA116 Unidirectional TSP 单向TSP
分阶段的DAG,注意字典序的处理和路径的保存. 定义状态d[i][j]为从i,j 出发到最后一列的最小花费,转移的时候只有三种,向上,向下,或平移. #include<bits/stdc++.h ...
- libxml2.dylb 导致<libxml/tree.h> 老是找不到头文件
添加了libxml2.dylb的framework ,结果还是引用不了<libxml/tree.h>, 老是提示找不到头文件. 这个问题其实比较容易解决,但是XCode的版本问题确实让开 ...
- python matplotlib.pyplot对图像进行绘制
imshow()是对图像进行绘制 imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colo ...
- Codeforces Round #277.5 (Div. 2)-B. BerSU Ball
http://codeforces.com/problemset/problem/489/B B. BerSU Ball time limit per test 1 second memory lim ...
- springboot上传linux文件无法浏览,提示404错误
1.配置文件地址置换 @Componentclass WebConfigurer implements WebMvcConfigurer { @Autowired ConfigUtil bootdoC ...