这是悦乐书的第320次更新,第341篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811)。像“discuss.leetcode.com”这样的网站域名由各种子域组成。在顶级,我们有“com”,在下一级,我们有“leetcode.com”,在最低级别,“discuss.leetcode.com”。当我们访问像“discuss.leetcode.com”这样的域名时,我们也会隐含地访问父名“leetcode.com”和“com”。

现在,将“计数配对域名”称为计数(表示此域收到的访问次数),后跟空格,后跟地址。计数配对域名的示例可以是“9001 discuss.leetcode.com”。

给出了计数配对域名的cpdomains数组,以相同的格式,返回所有域名和访问次数组成的字符串数组。例如:



输入:[“9001 discuss.leetcode.com”]

输出:[“9001 discuss.leetcode.com”,“9001 leetcode.com”,“9001 com”]

说明:我们只有一个网站域名:“discuss.leetcode.com”。如上所述,还将访问子域“leetcode.com”和“com”。所以他们将被访问9001次。



输入:[“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”访问一次,“wiki.org”访问5次。对于子域名,我们将访问“mail.com”900 + 1 = 901次,“com”900 + 50 + 1 = 951次,以及“org”5次。



注意

  • cpdomains的长度不会超过100。

  • 每个域名的长度不超过100。

  • 每个地址都有1或2个“.”字符。

  • 任何计数配对域名中的访问次数不会超过10000。

  • 答案输出可以按任何顺序返回。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

每个域名加访问次数组成的字符串,根据域名中的点号,可以分为两种情况:

(1)域名中只有一个点号时,可以拆分成两个新的字符串,一是访问次数加最后面的顶级域名,二是访问次数加域名本身。

(2)域名中有两个点号时,可以拆分成三个新的字符串,一是访问次数加最后面的顶级域名,二是访问次数加第二级域名加顶级域名,三是访问次数加域名本身。

而顶级域名或者二级域名加顶级域名可能会重复出现,但是点击次数要进行累加,所以借助HashMap来存储数组,key为域名,value为访问次数。

整体思路是遍历cpdomains数组,拆分每一组计数配对域名,存入HashMap中,遍历HashMap存入List中,返回List。

public List<String> subdomainVisits(String[] cpdomains) {
List<String> list = new ArrayList<String>();
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (String str : cpdomains) {
// 根据空格进行第一次拆分
String[] arr = str.split(" ");
// 对第一次拆分的结果以点号进行二次拆分
String[] arr2 = arr[1].split("\\.");
// 第一次拆分中,域名的访问次数
int count = Integer.valueOf(arr[0]);
String current = "";
int n = arr2.length-1;
// 从后往前遍历第二次拆分的结果,存入HashMap
for (int i=n; i >= 0; i--) {
current = arr2[i] + (i<n ? "." : "") + current;
map.put(current, map.getOrDefault(current, 0)+count);
}
}
for (String key : map.keySet()) {
list.add(map.get(key)+" "+key);
}
return list;
}

03 小结

算法专题目前已日更超过五个月,算法题文章189+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Subdomain Visit Count(Java实现)的更多相关文章

  1. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  2. LeetCode算法题-Image Smoother(Java实现)

    这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...

  3. LeetCode算法题-Non-decreasing Array(Java实现)

    这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...

  4. LeetCode算法题-Distribute Candies(Java实现)

    这是悦乐书的第266次更新,第279篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第133题(顺位题号是575).给定具有偶数长度的整数数组,其中该数组中的不同数字表示不 ...

  5. LeetCode算法题-Detect Capital(Java实现)

    这是悦乐书的第251次更新,第264篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第118题(顺位题号是520).给定一个单词,你需要判断其中大写字母的使用是否正确.当下 ...

  6. LeetCode算法题-Hamming Distance(Java实现)

    这是悦乐书的第237次更新,第250篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461).两个整数之间的汉明距离是相应位不同的位置数.给定两个整数 ...

  7. LeetCode算法题-Poor Pigs(Java实现)

    这是悦乐书的第235次更新,第248篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455).有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒 ...

  8. LeetCode算法题-Assign Cookies(Java实现)

    这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...

  9. LeetCode算法题-Add Strings(Java实现)

    这是悦乐书的第223次更新,第236篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第90题(顺位题号是415).给定两个非负整数num1和num2表示为字符串,返回num ...

随机推荐

  1. centos/linux 禁止root用户远程登录

    注意:在禁止root等前要建立一个用户用来远程登录,否则退出后无法通过远程登录服务器. 编辑 /etc/ssh/sshd_config 文件 更改参数 PermitRootLogin yes 为 Pe ...

  2. 在Linux上安装Python3

    1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...

  3. 用户注册登录系统 V2.0

    # 准备空列表 users = [] # 准备当前在线用户 online_user = {} while True: # 打印系统提示 print("欢迎使用 用户注册登录系统V2.0&qu ...

  4. django项目部署上线

    前言 完善的django项目上线,有很多种上线的方法,比如apache, uwsgi, nginx等.这里只介绍2种,一种是django自带的,另外一种则是nginx + uwsgi完成介绍.这里的系 ...

  5. Python零散函数

    1. python json.dumps() json.dump()的区别 注意cat ,是直接输出文件的内容 load和loads都是实现"反序列化",区别在于(以Python为 ...

  6. Python_跟随目标主机IP变换

    ''' 为了防止黑客攻击或者负载均衡,会经常变换主机,这样同一个域名在不同时间可能会对应不同的IP地址,在这种情况下可以通过 socket模块的gethostbyname()函数来实时获取目标主机的I ...

  7. webpack4:连奏中的进化

    webpack4在2月底的时候发布,这次webpack4有了一个名字"Legato",也就是"连奏"的意思,寓意webpack在不断进化,而且是无缝(no-ga ...

  8. Net Core动态加载webservice/WCF

    1.动态加载的目的 前端时间和顺丰对接了个项目(PS:顺丰的开发对外能力真的是掉粉),用的webservice 测试时用的无固定IP访问,正式版需要固定IP访问,我的理解是web服务都是全网络可以访问 ...

  9. PAT1082:Read Number in Chinese

    1082. Read Number in Chinese (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  10. 解决window.showModalDialog在Firefox无法支持

    在网页程序中,有时我们会希望使用者按下按钮后开启一个保持在原窗口前方的子窗口,而在IE中,我们可以使用showModalDialog来达成,语法如下 : vReturnValue = window.s ...