929. Unique Email Addresses

2018 年 11 月 26 日

很久没有做leetcode了在坚定了自己的人生走向之后决定每日一刷,从最简单的easy开始,不求每天做很多,只求每日坚持,时间还有3年+,对,坚持就是胜利。额 发现很多不会了,这道题,基本上是边查着基础知识,边做的,不过自己的思路还ok,额,勉强能success吧,等下得比较一下优秀的代码和我的辣鸡代码中的差距

看这道题的第一眼,感觉就是用hash来做吧,把字符串处理一下,不该有的都去掉,然后再比较一下处理后的字符串时候存在过。emmm想想思路应该是欧克 的,就开始撸吧。

这里需要去抄点基本说明:
hash_map 查找速度会比map快,而且查找速度基本和数据量大小无关,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash_map。但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,hash_map可能会让你陷入尴尬,特别是当你的hash_map对象特别多时,你就更无法控制了,而且hash_map的构造速度较慢。权衡三个因素: 查找速度, 数据量, 内存使用。

(记得#include map 头文件,还有使用using namespace std;)
map<string ,int> mails;第一个类型是key的类型,第二个类型是value的类型这样就弄了一个map的空对象
要添加值的话就是很简单的 就这个为例 mails[“我要考北大”] = 1;这样就添加ok
要查找的话话也很简单
if(mails.find(“我要考北大”)!= mails.end())如果里面存在的话

然后vector中看装了多少元素是用size()函数,string中看字符长度是length(),经常搞混的说,这两个要用都得添加头文件 ,然后命名空间std

然后就是我另一个遗忘的点,string类型可以和字符和字符串相加得到新的字符串
string a="";这是空的字符串 length 为0,a+=‘0’,a的length就变为了1,
再来一个a+=“s”,ok 长度就变为了2;还有一个push_back(),a.push_back(‘a’);

问题还有很多,以后慢慢刷慢慢终结就好。

int numUniqueEmails(vector<string>& emails) {
        map<string ,int> mails;
        int s = emails.size();
        int sum = 0;
        for(int i = 0; i<s ; i++){
            string one_s;
            int len = emails[i].length();
            bool add = false;
            for(int j = 0 ; j < len ; j++){
                if(emails[i][j] == '.' && add == false)
                    continue ;
                if(emails[i][j] == '+' && add == false){
                    while(emails[i][j] != '@')
                        j++;
                    add = true ;
                }
                one_s += emails[i][j];


            }
            if(mails.find(one_s) == mails.end()){
                mails[one_s]=1;
                sum ++;
            }
        }
        return sum;
    }

猜你喜欢

转载自blog.csdn.net/Do_not_be_shy/article/details/84549124