解答

class Solution {
public:
    vector<string> subdomainVisits(vector<string>& cpdomains) {
        vector<string> result;
        map<string,int> pair;
        for(string str:cpdomains){
            auto space=str.find(' ');
            int temp=stoi(str.substr(0,space));
            str=str.substr(space+1);
            while(!str.empty()){
                 pair[str] += temp;
                 if(str.find('.')!=string::npos){
                     str=str.substr(str.find('.')+1);
                 }
                 else{
                     str.clear();
                 }
            }
        }
        for(auto temp:pair){
             result.push_back(to_string(temp.second)+' '+temp.first);
        }
        return result;
    }
};

此题个人有思路,但无从下手,是参考他人解法后从而解出来的。

参考链接:https://leetcode.com/problems/subdomain-visit-count/discuss/129879/C++-O(sum-of-lengths-of-strings)-simple-Solution

笔记

  1. string类型中的find,substr成员函数的使用
  2. 字符串转整数函数stoi,整数转字符串函数to_string

函数学习

1. string::find 查找

参考C++ Primer 5th 9.5.3节

1. 函数原型,有四个重载版本
// 1
size_type find( CharT ch, size_type pos = 0 ) const;
// 2
size_type find( const basic_string& str, size_type pos = 0 ) const
// 3
size_type find( const CharT* s, size_type pos = 0 ) const;
// 4
size_type find( const CharT* s, size_type pos, size_type count ) const;
2. 解释

返回类型:是一个size_type类型,是一个整数,表示匹配位置的下标;如果没有找到,则会返回string::npos,这是一个确定值,类型是整数,初始值为-1
查找开始位置:即pos,在1,2,3中默认从开始查找
前三个版本解释:1。查找字符;2. 查找string类型字符串;3.查找C风格字符串
第四个版本解释:查找一个C风格字符串的前n个字符字符,同时开始查找位置pos需指定

3. 示例程序
/********************************************
*
* 程序作用:测试string类型中的find成员函数
*
* a11测试第一个重载版本,能够找到;
* a12测试第一个重载版本,但不能找到
* a21测试第二个重载版本,能够找到;
* a22测试第二个重载版本,但不能找到
* a3 测试第三个重载版本,但不能找到
* a4 测试第四个重载版本,能够找到
*
* 编 制 人:niaocaics
* 编制时间: 2018.5.23
* 联系邮箱:niaocaics@163.com
*
*/
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    string s{ "Hello World" };
    size_t a11 = s.find(' '),a12=s.find(' ',7);
    size_t a21 = s.find("lo"),a22=s.find("lol");
    const char * str = "lol";
    size_t a3 = s.find(str);
    size_t a4 = s.find(str,1,2);
    cout << a11 << " " << a12 << endl << a21 << " " << a22
        << endl << a3 << endl << a4 << endl;
    system("pause");
    return 0;
}

输出结果
环境:Visual Studio 2017
输出:

5 4294967295
3 4294967295
4294967295
3

由此可见,npos会返回-1,因为size_t是一个无符号整数,所以整数-1会被解析成最大数

2. string::substr 求子串

参考C++ Primer 5th 9.5.1节

1. 函数原型:
basic_string substr( size_type pos = 0,
                size_type count = npos ) const;
2. 解释

pos代表开始位置,默认会从字符串开头开始;
count代表复制的字符数,默认为npos,但由于size_type是无符号整数,因此有符号的-1会被解析成最大数,即count=最大数即到字符串结尾

3. 示例程序
/****************************************************************
* 程序作用:测试string类型中的substr成员函数
*
* s1使用默认参数
* s2只对开始位置进行处理
* s3指定开始字符,和字符长度(在字符串范围内)
* s3指定开始字符,和字符长度(但大于在字符串原本长度)
*
* 编 制 人:niaocaics
* 编制时间: 2018.5.24
* 联系邮箱:niaocaics@163.com
*
*/
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    string s = { "Hello World!" };
    string s1 = s.substr();
    string s2 = s.substr(6);
    string s3 = s.substr(6, 3);
    string s4 = s.substr(6, 100);
    cout << s1 << endl << s2 << endl <<
            s3 << endl << s4 << endl;
    system("pause");
    return 0;
}

输出结果
环境:Visual Studio 2017
输出:

Hello World!
World!
Wor
World!

3 stoi 将字符串转化为整数

1 函数原型
int stoi( const std::string& str,
        std::size_t* pos = 0, int base = 10 );

字符串有俩种选择,宽字符串wstring和一般string,
返回类型有三种,int;long;long long

2 解释

str是要转换的字符串,pos代表开始位置默认从字符串,base代表进制,默认十进制

3 示例程序
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    string s = { "1234567" };
    int a = stoi(s);
    cout << a << endl;
    system("pause");
    return 0;
}

输出:1234567

4. to_string 把数转换成字符串(C++11)

std::string to_string( int value );

value可以是int,long,long long,unsigned int,unsigned long,unsigned long long,float,double,long double类型

2 解释

value是数字,返回一个字符串

3 示例程序
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    int a1 = 23456;
    float a2 = 3.1415;
    string s1 = to_string(a1);
    string s2 = to_string(a2);
    cout << s1 << endl << s2 << endl;
    system("pause");
    return 0;
}

输出:
23456
3.141500

总结

此题暴露了我对库函数的不熟悉,以后要多了解库函数

811. Subdomain Visit Count (5月23日)的更多相关文章

  1. 【Leetcode_easy】811. Subdomain Visit Count

    problem 811. Subdomain Visit Count solution: class Solution { public: vector<string> subdomain ...

  2. 811. Subdomain Visit Count - LeetCode

    Question 811. Subdomain Visit Count Example 1: Input: ["9001 discuss.leetcode.com"] Output ...

  3. 【LeetCode】811. Subdomain Visit Count 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计次数 日期 题目地址:https://lee ...

  4. LeetCode 811 Subdomain Visit Count 解题报告

    题目要求 A website domain like "discuss.leetcode.com" consists of various subdomains. At the t ...

  5. [LeetCode&Python] Problem 811. Subdomain Visit Count

    A website domain like "discuss.leetcode.com" consists of various subdomains. At the top le ...

  6. LeetCode 811. Subdomain Visit Count (子域名访问计数)

    题目标签:HashMap 题目给了我们一组域名,让我们把每一个域名,包括它的子域名,计数. 遍历每一个域名,取得它的计数,然后把它的所有子域名和它自己,存入hashmap,域名作为key,计数作为va ...

  7. 811. Subdomain Visit Count

    这题主要难在构建关联容器,方法很多,但是核心都是把原字符串一截一截减下来处理,先把前面用空格隔开的次数转化为整数,然后处理后面的多层子域. 方法一,查找标志字符,用标志字符把字符串分成几段 stati ...

  8. 2016年12月23日 星期五 --出埃及记 Exodus 21:18

    2016年12月23日 星期五 --出埃及记 Exodus 21:18 "If men quarrel and one hits the other with a stone or with ...

  9. [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 )

    [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 ) billcheung 发表于 2011-10-23 00:07:49 https://www.itsk.com ...

随机推荐

  1. ideal key

    常用快捷键 设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“eclipse” -> 然后“Copy”一份 - ...

  2. 002服务提供者Eureka

    1.POM配置 和普通Spring Boot工程相比,仅仅添加了Eureka.Spring Boot Starter Actuator依赖和Spring Cloud依赖管理 <dependenc ...

  3. Windows Server 2008 R2配置JSP网站无法访问

    在Windows Server 2008 R2中配置好JSP网站后,在本机可以使用 localhost访问网站,但是局域网内其机器无法访问,则需要在Windows Server 2008 R2的系统管 ...

  4. 新开篇关于vue

    参考链接:http://cn.vuejs.org/v2/guide/instance.html 了解vue组件的生命周期: 1.beforeCreate 即将创建 2.created 创建 3.bef ...

  5. C++11标准之右值引用(rvalue reference)

    1.右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题.但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了Copy Elision.RVO(包 ...

  6. zimbra邮件服务器的搭建和迁移

    背景: 公司最近由于服务器费用问题,需要将邮件服务器从亚马逊(新加坡)云服务器A迁移到阿里云(香港)云服务器B. 由于邮箱使用的是域名访问,但是没有进行备案,所以只能迁移到港澳台地区,才能正常使用. ...

  7. SOA架构

    基于服务的SOA架构_后续篇   今天是元宵节,首先祝各位广大博友在接下来的光阴中技术更上一层,事事如意!(没能在元宵节发布,今天就补上吧) 昨天简单介绍了一下本人在近期开发过的一个电商购物平台的架构 ...

  8. Android(java)学习笔记207:Android下的属性动画(Property Animation)

    1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...

  9. UVa 1609 - Foul Play

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. WMIC_2