题目地址:
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为最长字符串长度。