Leetcode 811 子網域名稱訪問計數

2021-08-27 00:07:37 字數 2231 閱讀 8629

乙個**網域名稱,如」discuss.leetcode.com」,包含了多個子網域名稱。作為頂級網域名稱,常用的有」com」,下一級則有」leetcode.com」,最低的一級為」discuss.leetcode.com」。當我們訪問網域名稱」discuss.leetcode.com」時,也同時訪問了其父網域名稱」leetcode.com」以及頂級網域名稱 「com」。

接下來會給出一組訪問次數和網域名稱組合的列表cpdomains 。要求解析出所有網域名稱的訪問次數,輸出格式和輸入格式相同,不限定先後順序。

示例 1:

輸入:

["9001 discuss.leetcode.com"]

輸出:

["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]

說明:

例子中僅包含乙個**網域名稱:"discuss.leetcode.com"。按照前文假設,子網域名稱"leetcode.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"]

說明:

按照假設,會訪問"google.mail.com"

900次,"yahoo.com"

50次,"intel.mail.com"

1次,"wiki.org"

5次。而對於父網域名稱,會訪問"mail.com"

900+1 = 901次,"com"

900 + 50 + 1 = 951次,和 "org"

5 次。

注意事項:

首先肯定是拆分,把陣列拆成一對一對的次數跟url對應的對

對於每一對而言,把url如何劃分出子串,跟數字相互對應,為之後做合併用,為查詢快,這裡想到的資料結構是map

每對url跟數字組成,拆成子串跟數字組合,把相同的子串數目相加,不同的,放入map,最後放入list中返回。

class solution 

int len = cpdomains.length;

mapmap = new hashmap<>();

for (int i = 0; i < len; i++) else

for (int j = 0; j < oneline.length(); j++) else }}

}}

listlist = new arraylist<>();

for (string str : map.keyset())

return

list;

}}

時間複雜度:o(n2)

1、如何快速的拆分子串?

乙個巧妙的遞迴遍歷,出現「.」就擷取,再在新串中遍歷,下乙個「.」,把原串拆分成多個子串

for (int j = 0; j < oneline.length(); j++) else 

}}

2、拆分是子串,但本身也是原串的子串,不需要拆分,在第一步原串的基礎上就判斷map是否有該原串,沒有新增,有的話疊加次數。

3、每次拆分完乙個子串,j要歸零,從新開始,在新的子串上,開始遍歷。

參考執行時間較短的程式,發現在每次判斷map中是否有該key,再決定往裡放還是疊加數字,可以用map的乙個函式搞定map.getordefault(s, 0)

default

v getordefault(object

key, v

defaultvalue)

這樣就可以簡化為:(思路是一樣的,實現方式上,這種更簡介)

class solution 

}map.put(s, map.getordefault(s, 0) + n);

}listres = new arraylist();

for (string d : map.keyset()) res.add(map.get(d) + " " + d);

return res;

}}

學習,參考~

LeetCode 811 子網域名稱訪問計數

乙個 網域名稱,如 discuss.leetcode.com 包含了多個子網域名稱。作為頂級網域名稱,常用的有 com 下一級則有 leetcode.com 最低的一級為 discuss.leetcode.com 當我們訪問網域名稱 discuss.leetcode.com 時,也同時訪問了其父網域...

leetcode 811 子網域名稱訪問計數

近期一直在用python刷leetcode的題,都提交到了github上了 乙個 網域名稱,如 discuss.leetcode.com 包含了多個子網域名稱。作為頂級網域名稱,常用的有 com 下一級則有 leetcode.com 最低的一級為 discuss.leetcode.com 當我們訪問...

子網域名稱訪問計數(leetcode 811)

題目 輸入 900 google.mail.com 50 yahoo.com 1 intel.mail.com 5wiki.org 輸出 901 mail.com 50 yahoo.com 900google.mail.com 5wiki.org 5 org 1 intel.mail.com 951...