leetcode-811-Subdomain Visit Count

时间:2022-05-16
本文章向大家介绍leetcode-811-Subdomain Visit Count,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述:

A website domain like "discuss.leetcode.com" consists of various subdomains. At the top level, we have "com", at the next level, we have "leetcode.com", and at the lowest level, "discuss.leetcode.com". When we visit a domain like "discuss.leetcode.com", we will also visit the parent domains "leetcode.com" and "com" implicitly.

Now, call a "count-paired domain" to be a count (representing the number of visits this domain received), followed by a space, followed by the address. An example of a count-paired domain might be "9001 discuss.leetcode.com".

We are given a list cpdomains of count-paired domains. We would like a list of count-paired domains, (in the same format as the input, and in any order), that explicitly counts the number of visits to each subdomain.

Example 1:
Input: 
["9001 discuss.leetcode.com"]
Output: 
["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]
Explanation: 
We only have one website domain: "discuss.leetcode.com". As discussed above, the subdomain "leetcode.com" and "com" will also be visited. So they will all be visited 9001 times.
Example 2:
Input: 
["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
Output: 
["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
Explanation: 
We will visit "google.mail.com" 900 times, "yahoo.com" 50 times, "intel.mail.com" once and "wiki.org" 5 times. For the subdomains, we will visit "mail.com" 900 + 1 = 901 times, "com" 900 + 50 + 1 = 951 times, and "org" 5 times.

Notes:

  • The length of cpdomains will not exceed 100
  • The length of each domain name will not exceed 100.
  • Each address will have either 1 or 2 "." characters.
  • The input count in any count-paired domain will not exceed 10000.
  • The answer output can be returned in any order.

要完成的函数:

vector<string> subdomainVisits(vector<string>& cpdomains) 

说明:

1、这道题给定一个vector,里面装着多个字符串。每个字符串是这样子的,"900 google.mail.com",最开始是数字,表示这个域名访问了多少次,后面是域名。

如上述例子,我们知道访问了900次google.mail.com,还访问了900次mail.com,还访问了900次com。

看一下example2就会很清晰了。

最后这道题要求我们返回所有的访问次数+访问域名,依旧是字符串的格式,存储在vector中。

2、题意清晰,这道题就是一道工程题,比较适合用python来写脚本。

但c++一直在用,就继续写下去吧。

首先,取出字符串中的数字,之后取出域名,域名要拆解出多个父域名。

然后,把这些域名+数字存储到map中去,不断累加。

最后,再把map中的结果存储到vector中,返回。

代码如下:

    vector<string> subdomainVisits(vector<string>& cpdomains) 
    {    
        unordered_map<string, int>m1; 
        int i,n;//i表示空格位置,n表示出现次数
        string s;//取出的网址
        for(auto word:cpdomains) //使用auto方便很多
        {
            i=word.find(" ");
            n=stoi(word.substr(0,i)); //stoi函数转换string到int
            s=word.substr(i+1,word.size()-i-1);
            for(int i=s.size()-1;i>=0;i--) //逐个处理
            {
                if(s[i]=='.') 
                    m1[s.substr(i+1,s.size()-i-1)]+=n; 
                else if(i==0)
                    m1[s.substr(i,s.size()-i)]+=n;
            }
        }
        vector<string>res;
        for(auto element:m1) 
            res.push_back(to_string(element.second)+" "+element.first);
        return res;
    }

上述代码实测13ms,beats 99.55% of cpp submissions。

感谢leetcode用户@code_report在discuss的分享,上述代码的实现参考了他的做法。