LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第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实现)的更多相关文章
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Image Smoother(Java实现)
这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...
- LeetCode算法题-Non-decreasing Array(Java实现)
这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...
- LeetCode算法题-Distribute Candies(Java实现)
这是悦乐书的第266次更新,第279篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第133题(顺位题号是575).给定具有偶数长度的整数数组,其中该数组中的不同数字表示不 ...
- LeetCode算法题-Detect Capital(Java实现)
这是悦乐书的第251次更新,第264篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第118题(顺位题号是520).给定一个单词,你需要判断其中大写字母的使用是否正确.当下 ...
- LeetCode算法题-Hamming Distance(Java实现)
这是悦乐书的第237次更新,第250篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461).两个整数之间的汉明距离是相应位不同的位置数.给定两个整数 ...
- LeetCode算法题-Poor Pigs(Java实现)
这是悦乐书的第235次更新,第248篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455).有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒 ...
- LeetCode算法题-Assign Cookies(Java实现)
这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...
- LeetCode算法题-Add Strings(Java实现)
这是悦乐书的第223次更新,第236篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第90题(顺位题号是415).给定两个非负整数num1和num2表示为字符串,返回num ...
随机推荐
- Roundcube 1.2.2 - Remote Code Execution
本文简要记述一下Roundcube 1.2.2远程代码执行漏洞的复现过程. 漏洞利用条件 Roundcube必须配置成使用PHP的mail()函数(如果没有指定SMTP,则是默认开启) PHP的mai ...
- mac上php版本切换
目标:Mac 环境下完成 php 版本之间的切换 在本地开发中很多时候我们需要多个版本的 php 开发环境.在公司中习惯用自己电脑开发的伙伴们,常常因为公司线上环境被迫更换php版本.但有不想降低自己 ...
- Flask类的属性和方法大全
Flask Property__class____dict____doc____module__app_ctx_globals_classconfig_classdebugdefault_config ...
- L1正则化比L2正则化更易获得稀疏解的原因
我们知道L1正则化和L2正则化都可以用于降低过拟合的风险,但是L1正则化还会带来一个额外的好处:它比L2正则化更容易获得稀疏解,也就是说它求得的w权重向量具有更少的非零分量. 为了理解这一点我们看一个 ...
- 如何找某个样式属于哪个Element
如果找不到样式所在的Element,那么可以参考排除法,逐个删除覆盖在同一位置的元素,如果该样式消失,那么可以判断为这个样式.
- 架构之微服务(etcd)
1. ETCD是什么 ETCD是用于共享配置和服务发现的分布式,一致性的KV存储系统.该项目目前最新稳定版本为2.3.0. 具体信息请参考[项目首页]和[Github].ETCD是CoreOS公司发起 ...
- Linux 下 Redis 安装与配置
1.Redis 的安装 在 Ubuntu 系统安装 redis 可以使用以下命令: $ sudo apt-get update $ sudo apt-get install redis-server ...
- java项目获取根路径(web项目和application项目的区分)
Java项目中经常要读取配置文件,涉及到读取配置文件的地方,就会要读定位文件的路径.因此,在项目如何正确获取文件路径尤为关键. 根据不同的java项目,在获取文件路径时候有一些 小区别 测试环境:E: ...
- Python并发编程之线程中的信息隔离(五)
大家好,并发编程 进入第三篇. 上班第一天,大家应该比较忙吧.小明也是呢,所以今天的内容也很少.只要几分钟就能学完. 昨天我们说,线程与线程之间要通过消息通信来控制程序的执行. 讲完了消息通信,今天就 ...
- PAT1039: Course List for Student
1039. Course List for Student (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...