【题目】
示例:
输入:["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"。
【题目关注点】
string的截取、替换、查找子串函数总结:
1. 截取子串
s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回
s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回
2. 替换子串
s.replace(pos, n, s1) 用s1替换s中从pos(包括pos)开始(包括0)的n个字符的子串
3. 查找子串
s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)
s.rfind(s1) 查找s中最后次出现s1的位置,并返回(包括0)
s.find_first_of(s1) 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_last_of(s1) 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.fin_first_not_of(s1) 查找s中第一个不属于s1中的字符的位置,并返回(包括0)
s.fin_last_not_of(s1) 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
【解答】
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
for(int i=0;i<emails.size();++i){
for(int j=0;j<emails[i].size();++j){
if(emails[i][j]=='+'){
//如果是“+”,之后的都不用再循环判断了,反正也是要删掉的
break;
}
if(emails[i][j]=='.'){
emails[i].replace(j,1,"");
}
}
int add_index = emails[i].find("+");
int a_index = emails[i].find("@");
if(add_index>0){
//注意这里不能写add_index!=0,因为当没有“+”时,find()函数返回-1
//此时会报out_of_range的错
emails[i].replace(add_index,a_index-add_index,"");
}
}
int flag = 0;
int number = 1;
for(int i=0;i<emails.size()-1;++i){
flag = 0;
for(int j=i+1;j<emails.size();++j){
if(emails[i]==emails[j]){
flag = 1;
break;
}
}
if(flag==0)
++number;
}
return number;
}
};