每天一例python程式0614

2021-08-20 18:10:18 字數 2527 閱讀 1090

題目:

811.子網域名稱訪問計數

乙個**網域名稱,如"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"]說明:

示例 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 次。

注意事項:

**--leetcode

思路1

迴圈遍歷,對於每乙個網域名稱,先把本身以及訪問次數新增到字典中,如果存在子網域名稱,則吧子網域名稱也新增到字典中,最後把字尾的訪問次數也新增到字典中。

這個需要乙個判斷,如果字典中不存在特定的鍵值,我們就把這個網域名稱當做鍵,訪問次數當做值,新增到字典中,如果存在這個網域名稱的鍵,則需要把這個網域名稱的訪問次數和本身的已有的訪問次數相加。如果使用傳統的方法,就是需要乙個判斷,如果網域名稱不存在鍵中,則字典增加乙個值,如果存在,則值相加。這個邏輯很是麻煩。

簡單的方法就是 :導入庫 collections

cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]

from collections import defaultdict

mydict = defaultdict(int)

#設定字典鍵的預設值 0 ,就不需要進行判斷鍵值是否存在。

res =

for item in cpdomains:

#對於某乙個網域名稱訪問次數新增進去

times,domains = item.split()

mydict[domains] += int(times)

#對於存在子網域名稱的網域名稱,把子網域名稱新增進去

if domains.count(".") ==2:

mydict[domains[domains.index("."): ]] += int(times)

#對於所有的網域名稱的字尾新增進去

list = domains.split(".")

mydict[list[-1]] += int(times)

#對於字典型別轉化為列表型別

for key in mydict:

str = str(mydict[key])+ " " + key

print(res)

思路2

from collections import defaultdict

domain_counts = defaultdict(int)

#設定字典鍵的預設值是 0

for cpdomain in cpdomains:

#把網域名稱以及訪問次數新增進去    

times, domains = cpdomain.split()

times = int(times)

domain_counts[domains] += times

#遍歷網域名稱,把第乙個點後面的字元當做子網域名稱,同時更新子網域名稱為新的網域名稱,直到沒有網域名稱為止

while '.' in domains:

domains = domains[domains.index('.') + 1:]

domain_counts[domains] += times

print(domain_counts)

print( [str(v) + ' ' + d for d, v in domain_counts.items()])

每天一例python程式0608

題目 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。leetcode 示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 思路1 給出這個題目,我思考後...

每天一模式 單例模式

一 單例模式是為了控制類只有乙個例項物件,通常在以下兩種情況需要考慮使用單例模式 1 業務邏輯的需求 2 效能的考慮 二 單例模式的機構圖 三 單例模式的幾種實現形式 1 形式一 public class singleton2 public static singleton2 getinstance...

Python的正則一例

悄悄打入公司內部ued的乙個python愛好者小眾群,前兩天一位牛人發了條訊息 小的測試題 re.split w test,test,test.返回什麼結果 一開始看,我倒沒注意w是大寫的,以為是小寫的w代表單詞字元 含下劃線 今天執行一看才發現是大寫的。在idle跑一下的結果如下 import r...