本文最后更新于: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
循环检查'.'
在不在域名字符串里,返回语句更是上列表解析式,我草,太嗯必了,薄纱我这种垃圾代码好吧。。。
希望本文章能够帮到您~