【题目】

【LeeCode做题日记(C/C++)--简单】929题:独特的电子邮件地址

示例:

输入:["[email protected]","[email protected]","[email protected]"]
输出:2
解释:实际收到邮件的是 "[email protected]" 和 "[email protected]"。

 

【题目关注点】

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;
    }
};

 

相关文章: