子域名访问计数

诸如discuss.lintcode.com这样的域名由各种子域名构成。最顶层是com,下一层是lintcode.com,最底层是discuss.lintcode.com.当访问discuss.lintcode.com时,会隐式访问子域名lintcode.comcom.

现给出域名的访问计数格式为“空格 地址”。 示例:9001 discuss.lintcode.com.

给出计数列表cpdomains. 返回每个子域名(包含父域名)的访问次数(与输入格式相同,顺序任意).

样例

样例 1:

输入: 
["9001 discuss.lintcode.com"]
输出: 
["9001 discuss.lintcode.com", "9001 lintcode.com", "9001 com"]
解释: 
只有一个域名:"discuss.lintcode.com". 如题所述,  
子域名"lintcode.com"和"com"也会被访问. 所以一共要访问9001次.

样例 2:

输入:
["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
输出:
["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
解释:
一共访问900次"google.mail.com",50次"yahoo.com",1次"intel.mail.com",5次"wiki.org".   
对于所有的子域名,会访问 900 + 1 = 901 次"mail.com",900 + 50 + 1 = 951 次"com",5次"org".

注意事项

  • cpdomains的长度不超过100.
  • 每个域名的长度不超过100.
  • 会有1到2个.包含在每个域名中.
  • 任何域名的访问计数都不会超过10000.
  • 返回结果的条目顺序随意.
class Solution {
public:
    /**
     * @param cpdomains: a list cpdomains of count-paired domains
     * @return: a list of count-paired domains
     */
    vector<string> subdomainVisits(vector<string> &cpdomains) {
        // Write your code here
        unordered_map<std::string,int> mymap;
       
        int size = cpdomains.size();
        //string tmpnum = "";
        for(int i = 0; i < size; i++)
        {
            string tmpnum = "";
            int num = 0;
            for(int j = 0;  j < cpdomains[i].size(); j++)
            {
                if(cpdomains[i][j] >= '0' && cpdomains[i][j] <= '9')
                {
                    tmpnum = tmpnum + cpdomains[i][j];
                }
                else if(cpdomains[i][j] == ' ')
                {
                    num = stoi(tmpnum);
                    //cout<<num<<endl;
                }
                else if(cpdomains[i][j-1] == ' ')
                {
                    string str = cpdomains[i].substr(j);
                    mymap[str] = mymap[str] + num;
                }
                else if(cpdomains[i][j-1] == '.')
                {
                    string str = cpdomains[i].substr(j);
                    mymap[str] = mymap[str] + num;
                }
            }
            
            
        }
        vector<string> ret;
        for ( auto it = mymap.begin(); it != mymap.end(); ++it )
        {
            //std::cout << " " << it->first << ":" << it->second<<endl;
            string tmp;
            tmp = std::to_string(it->second) +" " + it->first;
            ret.push_back(tmp);
        }
             
        return ret;
    }
};

 

上一篇:lintcode 382. 三角形计数【双指针】


下一篇:lintcode 766. 闰年