解题思路:
- 将每个域名用哈希表存储起来,出现次数相加,便可以得到数据,具体思路:
- 将前面的数字转化成int类型数字
- 将 ' '(空格) 或者 '.'(点) 之后字符串存入到哈希表中充当键值
- 将前面的数字累加到对应的哈希表中
代码实现:
class Solution {
public:
unordered_map<string,int> ax;
vector<string> str;
vector<string> subdomainVisits(vector<string>& cpdomains) {
int n=cpdomains.size();
for(int i=0;i<n;i++)
{
int m=cpdomains[i].length();
int num=0;
for(int j=0;j<m;j++)
{
if(cpdomains[i][j]<='9'&&cpdomains[i][j]>='0') //是数字将其由string字符串转化为int类型整数
{
num=num*10+(cpdomains[i][j]-'0');
}
if(cpdomains[i][j]==' '||cpdomains[i][j]=='.') //如果是点或者空格的话,则需要将其后的域名存储
{
ax[cpdomains[i].substr(j+1)]+=num;
}
}
}
for(auto it=ax.begin();it!=ax.end();it++) //迭代器取用每个哈希表键值对
{
int cx=it->second;
string dx=to_string(cx); //利用to_string()函数将int型转化为string型
dx=dx+' '+it->first; //连接
str.push_back(dx); //压入vector<string>中
}
return str;
}
};
复杂度分析:
- 时间复杂度为O(n^2);
- 空间复杂度为O(n^2);