1006. 子域名访问计数
诸如discuss.lintcode.com这样的域名由各种子域名构成。最顶层是com,下一层是lintcode.com,最底层是discuss.lintcode.com.当访问discuss.lintcode.com时,会隐式访问子域名lintcode.com和com.
现给出域名的访问计数格式为“空格 地址”。 示例:9001 discuss.lintcode.com.
给出计数列表cpdomains. 返回每个子域名(包含父域名)的访问次数(与输入格式相同,顺序任意).
样例
样例 1:
输入:
["9001 discuss.lintcode.com"]
输出:
["9001 discuss.lintcode.com", "9001 lintcode.com", "9001 com"]
解释:
只有一个域名:"discuss.lintcode.com". 如题所述,
子域名"lintcode.com"和"com"也会被访问. 所以一共要访问9001次.
样例 2:
输入:
["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
输出:
["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
解释:
一共访问900次"google.mail.com",50次"yahoo.com",1次"intel.mail.com",5次"wiki.org".
对于所有的子域名,会访问 900 + 1 = 901 次"mail.com",900 + 50 + 1 = 951 次"com",5次"org".
注意事项
-
cpdomains的长度不超过100.
-
每个域名的长度不超过100.
-
会有1到2个.包含在每个域名中.
-
任何域名的访问计数都不会超过10000.
-
返回结果的条目顺序随意.
public class Solution {
List<String> list = new ArrayList<>();
HashMap<String, Integer> hashMap = new HashMap<>();
public List<String> subdomainVisits(String[] cpdomains) {
// Write your code here
for (String s : cpdomains) {
String[] temp = s.split(" ");
int number = Integer.parseInt(temp[0]);
String[] com = temp[1].split("\\.");
addHashData(temp[1], number);
String value=com[com.length-1];
addHashData(value, number);
for (int i = com.length-2; i > 0 ; i--) {
value=com[i]+"."+value;
addHashData(value,number);
}
}
Iterator iter = hashMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
list.add(val+" "+key);
}
return list;
}
private void addHashData(String value, int number) {
if (hashMap.containsKey(value)) {
hashMap.put(value, number + hashMap.get(value));
} else
hashMap.put(value, number);
}
}