811. Subdomain Visit Count

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
这里写图片描述
英文叙述非常的不明确,直接截图来阐释。前面的数字可以看做出现的个数。问题要求统计各个域名出现的次数。

2,题目思路
对于统计数目类型的问题,在python中的话首先想到的就是字典,而在C++中,想到的便是和字典类似的map容器。这种容器在前面也有介绍过,其他的博客对map和unordered_map也有很详细的介绍,这里便不再赘述。
另外一点,便是如何得到不同长度的域名。举个例子,对于900 google.mail.com,它所对应有:google.mail.com,mail.com,com这三个域名,每个出现次数都是900,将域名设为key value,出现次数设为mapped value,便可以很方便的得到结果。获取域名的方式,可以利用从后往前的遍历,遇到“.”便将其记录到设定的map中去。
在实现程序找那个还有一些其他的编程技巧。

3,程序源码

class Solution {
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        unordered_map<string, int> domainRecord;
        vector<string> resDomain;
        for(auto domain : cpdomains)
        {
            int i = domain.find(" ");   //找到空格所在的索引
            int num = stoi(domain.substr(0,i)); //将出现次数的string转换为int,用到了stoi方法
            string eachDomain = domain.substr(i+1, domain.size()-i-1);
            for(int i = eachDomain.size()-1; i>=0; i--)
            {
                if(eachDomain[i]=='.')
                {
                    domainRecord[eachDomain.substr(i+1,eachDomain.size()-i-1)] += num;
                }
                else if(i == 0)
                {
                    domainRecord[eachDomain.substr(0,eachDomain.size())] += num;
                }
            }

        }
        for(auto domain: domainRecord)
        {
            resDomain.push_back(to_string(domain.second)+" "+domain.first);
        }
        return resDomain;
    }
};

首先,要说的是,个人感觉在写程序的过程中未必就见得程序写的越短越好。当然在保证功能的前提下,去掉无用的冗余代码自然是有必要的。但是有的时候为了保证代码的可读性,还是将一些必要的逻辑和信息写出来会比较好吧。
1, str.find(” “)

string中 find()的应用 (rfind() 类似,只是从反向查找)
原型如下:
(1)size_t find (const string& str, size_t pos = 0) const; //查找对象–string类对象
(2)size_t find (const char* s, size_t pos = 0) const; //查找对象–字符串
(3)size_t find (const char* s, size_t pos, size_t n) const; //查找对象–字符串的前n个字符
(4)size_t find (char c, size_t pos = 0) const; //查找对象–字符
结果:
找到 – 返回 第一个字符的索引
没找到–返回 string::npos

在程序中,即找到空格对应的索引值(因为str中只有一个空格,因此也就是第一个空格的索引)。

2, str.substr(index, length)
获取字符串的子串的一种方式。
其中index是开始获取的索引值,length表示所要获取的子字符串的长度。

3,unordered_map

unordered_map<type1, type2> mapName;

mapName[type1] = type2;

比如type1设置字符串类型,type2设置整型类型,就可以做到统计字符串出现的次数(每个字符串都对应一个数字。)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值