力扣-811.子域名访问计数

本文最后更新于:2022年10月5日 晚上

题目描述

第一张图

实现

我是这么想的,每个字符串都使用两次spilt()方法进行字符串的提取,第一次分隔符为" ",第二次则为".",这样,我们第一次提取出来的就是访问次数和访问域名,第二次则是提取子域名和父域名。
然后把所有东西都塞进哈希表(字典)里,Key为域名,Value为访问次数。如果哈希表存在该域名就直接加访问次数,否则就创建一个新键值对并加上访问次数。
程序应该是二重循环,要遍历一次传入的字符串数组,还要遍历第二次使用spilt()得到的域名。
关于输出格式,同样的用一个字符串数组保存结果,遍历字典,字符串格式为:Value + " " + Key
然后我的第一遍实现(代码未优化):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def subdomainVisits(self, cpdomains: List[str]) -> List[str]:
result: List[str] = list()
a_dict = dict()
for s in cpdomains: # 遍历给定数组
tmp = s.split(" ")
count = int(tmp[0])
domains = tmp[1].split(".")
for i, domain in enumerate(domains): # 遍历域名
for j in range(i + 1, len(domains)): # 拼接域名
domain = domain + "." + domains[j]
if domain in a_dict:
a_dict[domain] += count
else:
a_dict[domain] = count
for k, v in a_dict.items():
result.append(str(v) + " " + k)
return result

好,写完发现我怎么用了三重循环,哦,原来是自己光记着把域名拆开没记着把域名拼起来才行了。
然后是官方题解:

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def subdomainVisits(self, cpdomains: List[str]) -> List[str]:
cnt = Counter()
for domain in cpdomains:
c, s = domain.split()
c = int(c)
cnt[s] += c
while '.' in s:
s = s[s.index('.') + 1:]
cnt[s] += c
return [f"{c} {s}" for s, c in cnt.items()]

我草,好嗯必,他用的是Counter,直接在知道格式的情况下利用spilt返回两个值就完事了,他用while循环检查'.'在不在域名字符串里,返回语句更是上列表解析式,我草,太嗯必了,薄纱我这种垃圾代码好吧。。。


这里有一只爱丽丝

希望本文章能够帮到您~


力扣-811.子域名访问计数
https://map1e-g.github.io/2022/10/05/leetcode-811/
作者
MaP1e-G
发布于
2022年10月5日
许可协议