诸如discuss.lintcode.com
这样的域名由各种子域名构成。最顶层是com
,下一层是lintcode.com
,最底层是discuss.lintcode.com
.当访问discuss.lintcode.com
时,会隐式访问子域名lintcode.com
和com
.
现给出域名的访问计数格式为“空格 地址”。 示例: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;
}
};