[LeetCode] 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.html

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".web

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.dom

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.

 

這道題讓咱們統計子域名的訪問量,所謂的子域名,就是一個完整的域名以點斷開的,每一個斷開的地方到末尾之間的子字符串就是一個子域名,如今給了咱們不少完整域名的訪問量,讓咱們統計全部子域名的訪問量,題目中給的例子很好的說明了問題。那麼這種統計字符串出現個數的問題,咱們應該不難想到須要用一個HashMap來創建字符串和其出現次數的映射。那麼接下來要作的就是將每個全域名提取出來,而後拆分紅子域名。提取全域名操做不難,由於給的格式都是同樣的,前面是數字,中間一個空格,後面是全域名。咱們只須要找到空格的位置,前面的部分轉爲整型數cnt,後面的就是全域名了。取出全域名以後就要進行拆分紅子域名了,咱們能夠進行遍歷,每當找到小數點的位置時,將後面的子字符串的映射值增長cnt,以此類推直到拆完全部的子域名。注意以前的全域名的映射值別忘了也要加上cnt,最後的最後咱們只要將HashMap中的映射對組成題目中要求返回的格式便可,參見代碼以下:this

 

解法一:google

class Solution {
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        vector<string> res;
        unordered_map<string, int> subdomainCnt;
        for (string cpdomain : cpdomains) {
            int spaceIdx = cpdomain.find(" ");
            int cnt = stoi(cpdomain.substr(0, spaceIdx));
            string rem = cpdomain.substr(spaceIdx + 1);
            for (int i = 0; i < rem.size(); ++i) {
                if (rem[i] == '.') {
                    subdomainCnt[rem.substr(i + 1)] += cnt;
                }
            }
            subdomainCnt[rem] += cnt;
        }
        for (auto a : subdomainCnt) {
            res.push_back(to_string(a.second) + " " + a.first);
        }
        return res;
    }
};

 

下面這種解法和上面的基本相同,惟一改變的地方就是拆分子域名的時候,沒用使用遍歷的for循環,而是繼續使用了find函數來查找下一個小數點的位置,參見代碼以下:spa

 

解法二:code

class Solution {
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        vector<string> res;
        unordered_map<string, int> subdomainCnt;
        for (string cpdomain : cpdomains) {
            int spaceIdx = cpdomain.find(" ");
            int cnt = stoi(cpdomain.substr(0, spaceIdx));
            while (spaceIdx != string::npos) {
                subdomainCnt[cpdomain.substr(spaceIdx + 1)] += cnt;
                spaceIdx = cpdomain.find('.', spaceIdx + 1);
            }
        }
        for (auto a : subdomainCnt) {
            res.push_back(to_string(a.second) + " " + a.first);
        }
        return res;
    }
};

 

參考資料:orm

https://leetcode.com/problems/subdomain-visit-count/solution/htm

https://leetcode.com/problems/subdomain-visit-count/discuss/157942/C++-concise-solution

https://leetcode.com/problems/subdomain-visit-count/discuss/121738/C++JavaPython-Easy-Understood-Solution

 

LeetCode All in One 題目講解彙總(持續更新中...)

相關文章
相關標籤/搜索