一、题目
二、思路(自己)
- 遍历输入的字符串数组,按照题目规则先修改字符串,再把数组存入HashSet中,返回size即可
- 第一次提交出现如下错误,原因是在使用split方法时,"."和"+"都需要使用"\\"进行转义
- 第二次提交出现错误,原因是在最后插入大hashset中时,没有把@加上,导致域名不一样但是判断却是一样
- 最后提交结果如下
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> res=new HashSet<>();
for (String email : emails) {
String[] sons=email.split("@");
String[] daus=sons[0].split("\\.");
String father="";
for (String dau : daus) {
father+=dau;
}
String[] ans=father.split("\\+");
String answer=ans[0]+"@"+sons[1];
res.add(answer);
}
return res.size();
}
}
三、答案(官方)
- 官方也用的哈希表
- 将每个邮件地址的本地名按照规则转换
- 去掉本地名中第一个加号后的部分包括加号
- 去掉本地名中所有句点
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> emailSet = new HashSet<String>();
for (String email : emails) {
int i = email.indexOf('@');
String local = email.substring(0, i).split("\\+")[0]; // 去掉本地名第一个加号之后的部分
local = local.replace(".", ""); // 去掉本地名中所有的句点
emailSet.add(local + email.substring(i));
}
return emailSet.size();
}
}