这是悦乐书的第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. ruby the diference between gets and gets.chomp()

    ruby the diference between gets and gets.chomp() 二者都是可以获取用户命令行输入的函数,但是 gets获取内容后,后面 附带了 多余的换行符号'\n'; ...

  2. .net core2.0通过entityframework访问Sqlserver数据库

    .net core经历2.0版本之后,已经非常稳定,完全可以进行企业级开发并跨平台部署到几乎任何服务器.个人测试效率是.net core是.net framework效率的3倍.其他语言没有测试,等测 ...

  3. MySQL 8 新特性之持久化全局变量的修改

    在8之前的版本中,对于全局变量的修改,其只会影响其内存值,而不会持久化到配置文件中.数据库重启,又会恢复成修改前的值.从8开始,可通过SET PERSIST命令将全局变量的修改持久化到配置文件中. 试 ...

  4. String的valueOf()用于将其它类型转换为字符串

    String的valueOf()重载方法可将double类型,int类型,boolean类型以及char数组类型等变量转换为String类变量. 注:String的valueOf()可将char数组转 ...

  5. Kali Linux图形界面与命令行界面的切换

    前言: 有时候为了节约系统资源,使用命令行界面能够让Linux系统的运行更加流畅,处理任务的速度也更加快.现在的Kali安装完成后默认是开机就启动图形化界面.本文将介绍通过编辑Kali启动引导文件的方 ...

  6. 2. 网友对app后端写作系列文章的写作建议

    很感谢"app后端"qq群的网友,在发布消息后,就收到了大量网友的反馈 下面的建议会融入到写作当中: 1.还有,对版本升级很感兴趣,我们现在为了兼容旧版本,已经把工程代码搞的乱哄哄 ...

  7. Cookie防篡改机制

    一.为什么Cookie需要防篡改 为什么要做Cookie防篡改,一个重要原因是 Cookie中存储有判断当前登陆用户会话信息(Session)的会话票据-SessionID和一些用户信息. 当发起一个 ...

  8. python使用随机的163账号发送邮件

    import linecache import smtplib import time import linecache import random #算出txt的行数,163账号_2.txt中,每一 ...

  9. MyBatis的增删改查。

    数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...

  10. js生成带logo的二维码

    作为一名java程序员,一直以来都是使用服务端生成二维码,最近接触前端的设计,感觉二维码这块如果放到前端去生成,一方面可以减轻服务端的压力,访问带宽,另一方面,前端页面控制比较顺畅 闲话少叙,说下我的 ...