【Lintcode】1006. Subdomain Visit Count

記錄演算法發表於2020-12-01

題目地址:

https://www.lintcode.com/problem/subdomain-visit-count/description

給定一個形如正整數 + 空格 + 域名格式的字串組成的陣列,正整數表示該域名被訪問了多少次。要求對每個域名進行計數,包括每個域名的各個子域名。返回相同格式的字串陣列。

可以用雜湊表進行計數。程式碼如下:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Solution {
    /**
     * @param cpdomains: a list cpdomains of count-paired domains
     * @return: a list of count-paired domains
     */
    public List<String> subdomainVisits(String[] cpdomains) {
        // Write your code here
        Map<String, Integer> map = new HashMap<>();
        for (String cpdomain : cpdomains) {
            String[] sp = cpdomain.split(" ");
            int count = Integer.parseInt(sp[0]);
    
            String domain = sp[1];
            map.put(domain, map.getOrDefault(domain, 0) + count);
    
            for (int i = 0; i < domain.length(); i++) {
                if (domain.charAt(i) == '.') {
                    String sub = domain.substring(i + 1);
                    map.put(sub, map.getOrDefault(sub, 0) + count);
                }
            }
        }
        
        List<String> res = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            res.add(String.valueOf(entry.getValue()) + ' ' + entry.getKey());
        }
        
        return res;
    }
}

時空複雜度 O ( n l ) O(nl) O(nl) n n n為字串個數, l l l為最長字串長度。

相關文章