811. Subdomain Visit Count (5月23日)

解答

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
* 联系邮箱:[email protected]
*
*/
#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
* 联系邮箱:[email protected]
*
*/
#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

总结

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

原文地址:https://www.cnblogs.com/cs-niaocai/p/9085722.html

时间: 2024-11-05 23:35:56

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

811.&#160;Subdomain Visit Count - LeetCode

Question 811.?Subdomain Visit Count 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.

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

[LeetCode&amp;Python] Problem 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

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

白菜刷LeetCode记-811.Subdomain Visit Count

好久没有写LeetCode,所以说坚持真的是一件很难的事情啊.今日重新开始吧,先来一道简单的题目,如下: 这道题首先想到的还是使用Map,代码如下: /** * @param {string[]} cpdomains * @return {string[]} */ var subdomainVisits = function(cpdomains) { let tmp = new Map(); let res = new Array(); for(let i = 0 ; i < cpdomains

2014年4月23日 10:22:08

step 1 : 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象. 按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的. 这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区.然后后台去解析缓冲区的字节流. http://cuisuqiang.iteye.com/blog/

软考中高项学员:2016年3月23日作业

软考中高项学员:2016年3月23日作业 一.项目进度管理1.进度管理包括哪六个过程?2.什么是滚动式规划?3.什么是控制账户.规划组合?4.请说明FS.FF.SS.SF的含义.5.虚活动的含义?6.三种依赖关系是哪三种?7.活动资源估算的方法.工具和技术?(记)8.活动历时估算的方法.工具和技术?(记)9.何时可以用类比估算?10.参数估算的含义?11.三点估算公式?标准差计算公式?正负一倍的标准差情况下,概率是多少?2倍的呢?3倍的呢?12.后备分析中,应急时间=时间储备=缓冲时间吗?13.

阿西莫夫 - 神们自己(2015年6月23日)

<神们自己> 作 者:阿西莫夫译 者:崔正男系 列:出 版:江苏凤凰文艺出版社字 数:230千字阅读完成:2015年6月23日

第17期中国智能家居主题沙龙将于5月23日在京举行

中国智能家居主题沙龙已经办16期,为中国智能家居的发展贡献了自己的力量,在这轮智能家居热潮中,沙龙将继续为政府.投资机投.智能家居产品提供商.智能家居方案提供商,智能家居集成商,智能家居渠道提供多方位的合作,促进行业的快速爆发. 活动宗旨: 搭建行业用户与企业沟通的桥梁,以交流.合作.服务为目的,探讨行业现状及走势,推广普及新理念.建立智能家居沟通平台以宣传企业品牌,推广新技术,展示新产品.根据智能家居行业各产业链上下游人士的需求,有针对性地提供服务,促进行业发展. 活动背景: 2013年初<国