題目鏈接如下
https://leetcode-cn.com/problems/subdomain-visit-count/description/
一個網(wǎng)站域名倚评,如"discuss.leetcode.com"天梧,包含了多個子域名霞丧。作為頂級域名蛹尝,常用的有"com"后豫,下一級則有"leetcode.com",最低的一級為"discuss.leetcode.com"陨收。當我們訪問域名"discuss.leetcode.com"時饭豹,也同時訪問了其父域名"leetcode.com"以及頂級域名 "com"。
給定一個帶訪問次數(shù)和域名的組合务漩,要求分別計算每個域名被訪問的次數(shù)拄衰。其格式為訪問次數(shù)+空格+地址,例如:"9001 discuss.leetcode.com"饵骨。
接下來會給出一組訪問次數(shù)和域名組合的列表cpdomains 翘悉。要求解析出所有域名的訪問次數(shù),輸出格式和輸入格式相同居触,不限定先后順序妖混。
示例 1:
輸入:
["9001 discuss.leetcode.com"]
輸出:
["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]
說明:
例子中僅包含一個網(wǎng)站域名:"discuss.leetcode.com"。按照前文假設(shè)轮洋,子域名"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"]
說明:
按照假設(shè)弊予,會訪問"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 次历葛。
注意事項:
cpdomains 的長度小于 100。
每個域名的長度小于100渡八。
每個域名地址包含一個或兩個"."符號啃洋。
輸入中任意一個域名的訪問次數(shù)都小于10000
解法如下
先上代碼:
//swift版本
class Solution {
func subdomainVisits(_ cpdomains: [String]) -> [String] {
var domains: Dictionary<String, String> = [:]
var domainArray: [(String, [String])] = []
for domainString in cpdomains {
var domain: [String] = []
domain = domainString.components(separatedBy: " ")
if domain.count == 2 {
let t = domain[1].components(separatedBy: ".")
var dms: [String] = []
var fd: String = ""
for string in t.reversed() {
if fd == "" {
fd = string
}
else {
fd = string + "." + fd
}
dms.append(fd)
}
domainArray.append((domain[0], dms))
}
}
for element in domainArray {
//element ["1" ,["mail.com", "com"]]
for domain in element.1 { //domain ["mail.com", "com"]
if domains[domain] == nil {
domains[domain] = element.0
}
else {
domains[domain] = "\(Int(domains[domain]!)! + Int(element.0)!)"
}
}
}
var res: [String] = []
for (domain, time) in domains {
res.append((time + " " + domain))
}
return res
}
}
大致思路:
1.先將請求次數(shù)和域名的這個字符串分離成兩個字符串,各自存放請求次數(shù)和域名(按空格" "區(qū)分)
2屎鳍。再將得到的域名字符串按"."倒序遍歷分割成域名和子域名宏娄,并放入數(shù)組A,和對應(yīng)的請求次數(shù)組成元組類型放入數(shù)組B逮壁,遍歷B孵坚,并放入字典C(此處偷懶了,用了字典??窥淆,key就是域名卖宠,value就是請求次數(shù))在字典C中可以通過相同的key來對請求次數(shù)相加,最后輸出忧饭。
如果有更好的思路扛伍,歡迎留言。