leetcode-811-Subdomain Visit Count

题目描述:

A website domain like "discuss.leetcode.com" consists of various subdomains. At the top level, we have "com", at the next level, we have "leetcode.com", and at the lowest level, "discuss.leetcode.com". When we visit a domain like "discuss.leetcode.com", we will also visit the parent domains "leetcode.com" and "com" implicitly.

Now, call a "count-paired domain" to be a count (representing the number of visits this domain received), followed by a space, followed by the address. An example of a count-paired domain might be "9001 discuss.leetcode.com".

We are given a list cpdomains of count-paired domains. We would like a list of count-paired domains, (in the same format as the input, and in any order), that explicitly counts the number of visits to each subdomain.

Example 1:
Input: 
["9001 discuss.leetcode.com"]
Output: 
["9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com"]
Explanation: 
We only have one website domain: "discuss.leetcode.com". As discussed above, the subdomain "leetcode.com" and "com" will also be visited. So they will all be visited 9001 times.
Example 2:
Input: 
["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
Output: 
["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
Explanation: 
We will visit "google.mail.com" 900 times, "yahoo.com" 50 times, "intel.mail.com" once and "wiki.org" 5 times. For the subdomains, we will visit "mail.com" 900 + 1 = 901 times, "com" 900 + 50 + 1 = 951 times, and "org" 5 times.

Notes:

  • The length of cpdomains will not exceed 100
  • The length of each domain name will not exceed 100.
  • Each address will have either 1 or 2 "." characters.
  • The input count in any count-paired domain will not exceed 10000.
  • The answer output can be returned in any order.

要完成的函数:

vector<string> subdomainVisits(vector<string>& cpdomains) 

说明:

1、这道题给定一个vector,里面装着多个字符串。每个字符串是这样子的,"900 google.mail.com",最开始是数字,表示这个域名访问了多少次,后面是域名。

如上述例子,我们知道访问了900次google.mail.com,还访问了900次mail.com,还访问了900次com。

看一下example2就会很清晰了。

最后这道题要求我们返回所有的访问次数+访问域名,依旧是字符串的格式,存储在vector中。

2、题意清晰,这道题就是一道工程题,比较适合用python来写脚本。

但c++一直在用,就继续写下去吧。

首先,取出字符串中的数字,之后取出域名,域名要拆解出多个父域名。

然后,把这些域名+数字存储到map中去,不断累加。

最后,再把map中的结果存储到vector中,返回。

代码如下:

    vector<string> subdomainVisits(vector<string>& cpdomains) 
    {    
        unordered_map<string, int>m1; 
        int i,n;//i表示空格位置,n表示出现次数
        string s;//取出的网址
        for(auto word:cpdomains) //使用auto方便很多
        {
            i=word.find(" ");
            n=stoi(word.substr(0,i)); //stoi函数转换string到int
            s=word.substr(i+1,word.size()-i-1);
            for(int i=s.size()-1;i>=0;i--) //逐个处理
            {
                if(s[i]=='.') 
                    m1[s.substr(i+1,s.size()-i-1)]+=n; 
                else if(i==0)
                    m1[s.substr(i,s.size()-i)]+=n;
            }
        }
        vector<string>res;
        for(auto element:m1) 
            res.push_back(to_string(element.second)+" "+element.first);
        return res;
    }

上述代码实测13ms,beats 99.55% of cpp submissions。

感谢leetcode用户@code_report在discuss的分享,上述代码的实现参考了他的做法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

【笔记】web前端零基础课0904_学习笔记

JavaScript,它的运行必须位于<script></script>标签之间,

8820
来自专栏海天一树

小朋友学C语言(34):main函数的参数

C/C++中的main()函数,可以带形式参数,也可以不带形式参数。这两种形式分别为: 1)int main() 2)int main(int argc, ch...

31160
来自专栏企鹅号快讯

Python笔记·第一章——Python基础(一)

Python的简介 1、Python的由来与版本 1.1 python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989...

24070
来自专栏desperate633

深度解析Java多线程的内存模型内部java内存模型硬件层面的内存模型Java内存模型和硬件内存模型的联系小结

Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操作系统,作为一个操作系统就有内存模型,这就是我们常说的JAVA内存模...

8010
来自专栏linux运维学习

linux学习第二十六篇:正则介绍,grep,sed,awk命令

正则介绍 正则就是一串有规律的字符串,掌握好正则对于编写shell脚本有很大帮助,各种编程语言中都有正则,原理是一样的。正则表达式是这样解释的:它是指一个用来...

48660
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版3.8节栈布局之栈溢出coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

11520
来自专栏程序你好

在c#中,如何序列化/反序列化一个字典对象?

.Net提供的各种序列化的类,通过使用这些类,. Net对象的序列化和反序列化变得很容易。但是字典对象的序列化并不是那么容易。为此,您必须创建一个能够序列化自身...

12810
来自专栏程序员的知识天地

Python程序员必备的30个编程技巧

直接交换2个数字的位置 Python 提供了一种直观的方式在一行代码中赋值和交换(变量值)。如下所示:

17920
来自专栏IMWeb前端团队

ES6解构嵌套对象

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 让我们先回忆一下ES6的对象解构,本文介绍各种ES6的对象解构...

30850
来自专栏Golang语言社区

golang的内存模型与new()与make()

要彻底理解new()与make()的区别, 最好从内存模型入手. golang属于c family, 而c程序在unix的内在模型: |低地址|text|dat...

36350

扫码关注云+社区

领取腾讯云代金券