929. 独特的电子邮件地址
题目
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。
例如,在 [email protected]中, alice 是本地名称,而 leetcode.com 是域名。
除了小写字母,这些电子邮件还可能包含 ‘,’ 或 ‘+’。
如果在电子邮件地址的本地名称部分中的某些字符之间添加句点(’.’),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"[email protected]” 和 “[email protected]” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)
如果在本地名称中添加加号(’+’),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 [email protected] 将转发到 [email protected]。 (同样,此规则不适用于域名。)
可以同时使用这两个规则。
给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?
思路
@符号之前的.全部去掉,并且@符号之前的第一个+号及之后的全部不要;@符号之后的全部不变
代码
class Solution {
public int numUniqueEmails(String[] emails) {
int len=emails.length;
char[] a=new char[100];
int[] b=new int[len];
String[] emails1=new String[len];
int i=0;
int j=0;
int k=0;
int sum=0;
int sum1=0;
int result=0;
for(i=0;i<len;i++)
{
b[i]=i;
sum=0;
k=0;
a=new char[100];
for(j=0;j<emails[i].indexOf('@');j++)
{
if(emails[i].charAt(j)!='+'&&emails[i].charAt(j)!='.')
{
a[j-sum]=emails[i].charAt(j);
}
else if(emails[i].charAt(j)=='.')
{
sum++;
}
else if(emails[i].charAt(j)=='+')
{
k=j;
break;
}
}
for(j=emails[i].indexOf('@');j<emails[i].length();j++)
{
a[j-sum-emails[i].indexOf('@')+k]=emails[i].charAt(j);
}
emails1[i]=new String(a);
}
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(emails1[j].equals(emails1[i]))
{
b[j]=b[i];
break;
}
}
}
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(b[j]==b[i])
{
sum1++;
break;
}
}
}
return len-sum1;
}
}
遇到的问题
1.char[] a=new char[100];用数组a来保存每次的新邮箱,因为是每次,所以数组要清空,不清空的话会导致数组后面多余的字符直接复制。其他计数变量也要从0开始。
2.返回len-sum1;我想的是应该返回len+1-sum1,一会再想一下
3.Java在线编译网站
https://www.tutorialspoint.com/compile_java_online.php
4.代码写的太不规范,感觉python比Java语言刷题时好用一点。
5.去掉.我是想用函数replace来写的,不知道为啥没有,想打死我自己
6.处理+应该用 replaceFirst函数,一会再改吧