這是悅樂書的第320次更新,第341篇原創
算法
今天介紹的是LeetCode算法題中Easy級別的第189題(順位題號是811)。像「discuss.leetcode.com」這樣的網站域名由各類子域組成。在頂級,咱們有「com」,在下一級,咱們有「leetcode.com」,在最低級別,「discuss.leetcode.com」。當咱們訪問像「discuss.leetcode.com」這樣的域名時,咱們也會隱含地訪問父名「leetcode.com」和「com」。數組
如今,將「計數配對域名」稱爲計數(表示此域收到的訪問次數),後跟空格,後跟地址。計數配對域名的示例能夠是「9001 discuss.leetcode.com」。數據結構
給出了計數配對域名的cpdomains數組,以相同的格式,返回全部域名和訪問次數組成的字符串數組。例如:
輸入:[「9001 discuss.leetcode.com」]dom
輸出:[「9001 discuss.leetcode.com」,「9001 leetcode.com」,「9001 com」]eclipse
說明:咱們只有一個網站域名:「discuss.leetcode.com」。如上所述,還將訪問子域「leetcode.com」和「com」。因此他們將被訪問9001次。
輸入:[「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」]開發工具
說明:咱們將訪問「google.mail.com」900次,「yahoo.com」訪問50次,「intel.mail.com」訪問一次,「wiki.org」訪問5次。對於子域名,咱們將訪問「mail.com」900 + 1 = 901次,「com」900 + 50 + 1 = 951次,以及「org」5次。
注意:測試
cpdomains的長度不會超過100。網站
每一個域名的長度不超過100。google
每一個地址都有1或2個「.」字符。
任何計數配對域名中的訪問次數不會超過10000。
答案輸出能夠按任何順序返回。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
每一個域名加訪問次數組成的字符串,根據域名中的點號,能夠分爲兩種狀況:
(1)域名中只有一個點號時,能夠拆分紅兩個新的字符串,一是訪問次數加最後面的頂級域名,二是訪問次數加域名自己。
(2)域名中有兩個點號時,能夠拆分紅三個新的字符串,一是訪問次數加最後面的頂級域名,二是訪問次數加第二級域名加頂級域名,三是訪問次數加域名自己。
而頂級域名或者二級域名加頂級域名可能會重複出現,可是點擊次數要進行累加,因此藉助HashMap來存儲數組,key爲域名,value爲訪問次數。
總體思路是遍歷cpdomains數組,拆分每一組計數配對域名,存入HashMap中,遍歷HashMap存入List中,返回List。
public List<String> subdomainVisits(String[] cpdomains) { List<String> list = new ArrayList<String>(); HashMap<String, Integer> map = new HashMap<String, Integer>(); for (String str : cpdomains) { // 根據空格進行第一次拆分 String[] arr = str.split(" "); // 對第一次拆分的結果以點號進行二次拆分 String[] arr2 = arr[1].split("\\."); // 第一次拆分中,域名的訪問次數 int count = Integer.valueOf(arr[0]); String current = ""; int n = arr2.length-1; // 從後往前遍歷第二次拆分的結果,存入HashMap for (int i=n; i >= 0; i--) { current = arr2[i] + (i<n ? "." : "") + current; map.put(current, map.getOrDefault(current, 0)+count); } } for (String key : map.keySet()) { list.add(map.get(key)+" "+key); } return list; }
算法專題目前已日更超過五個月,算法題文章189+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!