[HackerRank]Tries Contacts

[HackerRank]Merge Sort Counting Inversions Merge Sort: Counting Inversions 这道题设定了一个情景,但其实是让我们复习merge sort。那么我们就来复习一下merge sort。 Merge sort的思想是先把数组分段,递归进行mergesort,再合并起来。有一个细节,在合并的过程中,可以借助合并的两段都是sort好的数列,利用这一特性合并起来会较快一些。送上伪代码: MergeSort(ar... 阅读详情

Tries: Contacts

这题让我门建立一个树来存电话簿的名字,并能够返回以某一字符串开头的名字有多少个。

难点在与自己建立一个数据结构。我的方法是建立一个字符树,每个节点存下有几个children,以及一个hash表,用于索引之后的字符。如下:

struct wordTree{
    int cnt;
    unordered_map<char, wordTree*> mp;
    wordTree(int n){
        cnt = n;
    }
};

add操作索引这个树,并在经过的节点cnt加1,表示它的children增加一个。碰到没有的字符,则新建新的节点。

void addContact(string str){
    auto cur = contactBook;
    for(auto c : str){
        if(!cur->mp[c]){
            cur->mp[c] = new wordTree(1);
            cur = cur->mp[c];
        }else{
            cur = cur->mp[c];
            cur->cnt++;
        }
    }
}

find操作则顺着树中的hash表找节点,找到后返回children的个数,找不到返回0。

int findContact(string str){
    auto cur = contactBook;
    for(auto c : str){
        if (!cur->mp[c])return 0;
        else cur = cur->mp[c];
    }
    return cur->cnt;
}

完整代码如下:

#include <vector>
#include <string>
#include <unordered_map>
#include <iostream>
#include <algorithm>

using namespace std;

vector<string> split_string(string);

struct wordTree {
    int cnt;
    unordered_map<char, wordTree*> mp;
    wordTree(int n) {
        cnt = n;
    }
};

wordTree* contactBook = new wordTree(0);

void addContact(string str) {
    auto cur = contactBook;
    for (auto c : str) {
        if (!cur->mp[c]) {
            cur->mp[c] = new wordTree(1);
            cur = cur->mp[c];
        }
        else {
            cur = cur->mp[c];
            cur->cnt++;
        }
    }
}

int findContact(string str) {
    auto cur = contactBook;
    for (auto c : str) {
        if (!cur->mp[c])return 0;
        else cur = cur->mp[c];
    }

    return cur->cnt;
}

int main()
{
    int n;
    cin >> n;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    for (int n_itr = 0; n_itr < n; n_itr++) {
        string opContact_temp;
        getline(cin, opContact_temp);

        vector<string> opContact = split_string(opContact_temp);

        string op = opContact[0];

        string contact = opContact[1];

        if (op == "add") {
            addContact(contact);
        }
        else if (op == "find") {
            int res = findContact(contact);
            cout << res << endl;
        }
    }

    return 0;
}

vector<string> split_string(string input_string) {
    string::iterator new_end = unique(input_string.begin(), input_string.end(), [](const char &x, const char &y) {
        return x == y && x == ' ';
    });

    input_string.erase(new_end, input_string.end());

    while (input_string[input_string.length() - 1] == ' ') {
        input_string.pop_back();
    }

    vector<string> splits;
    char delimiter = ' ';

    size_t i = 0;
    size_t pos = input_string.find(delimiter);

    while (pos != string::npos) {
        splits.push_back(input_string.substr(i, pos - i));

        i = pos + 1;
        pos = input_string.find(delimiter, i);
    }

    splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));

    return splits;
}
AltiumDesigner.zip 立即下载

相关推荐

风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于隔离型全桥LLC谐振变换器的建模、仿真与参数设计,涵盖其在电力电子系统中的关键应用,如软启动、闭环控制、变频控制及效率优化等。该模型支持对LLC变换器在不同工作模式下的动态响应与性能表现进行深入研究,适用于探究谐振拓扑结构、磁性元件设计、谐振参数匹配以及先进控制策略的科研与工程实践。同时,文档配套提供了仿真模型、设计报告与计算书等完整资料,强化了其实用性与教学价值。; 适合人群:具备电力电子、自动化或电气工程等相关专业背景,从事电力电子变换器研发、系统仿真与控制算法设计的科研人员、工程师及研究生。; 使用场景及目标:①用于全桥LLC谐振变换器的建模、仿真与动态性能分析;②支持对软启动过程、闭环稳压控制、变频调谐及效率优化等核心技术的研究与教学;③为电力电子电源系统的工程设计、参数优化与控制策略验证提供高精度仿真平台。; 阅读建议:建议结合Plecs或Simulink等仿真工具进行动手实践,重点理解电路拓扑构建、谐振参数计算、控制器设计与系统稳定性分析,并配合文档中的设计报告与计算书,系统掌握从理论到仿真的完整流程。

C++ string 详解

C++中针对C语言中处理字符串的难题,在标准库中设计了string类,因此现在编程中涉及到字符串的处理,就可以直接使用string类了。     之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 =进行赋值操作,==

ll365594480的专栏 8445

国央企创新负责人如何通过平台实现科技创新资源的系统集成与高效配置?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

堆,堆在C++中用法

Heap 堆有最大堆与最小堆,也有对应的push和pop操作。在最大堆中,最大的元素在堆顶,pop会将最大的元素推出, 最小堆则反之。 C++中的用法 C++中的堆,要基于向量使用。操作基于三个函数std::make_heap,std::push_heap,std::pop_heap,并且要配合push_back与pop_back使用。需要#include &lt;algorithm&g...

JOHZEN 1336

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于全桥LLC谐振变换器在电力电子系统中的建模与仿真研究。该资源提供了基于Plecs平台的高精度仿真模型,完整呈现了变换器的主电路拓扑、谐振参数设计、软开关实现机制及变频控制策略,能够有效支持对系统效率、动态响应与稳态性能的深入分析。模型充分体现了LLC谐振变换器在实现零电压开关(ZVS)、降低开关损耗和提升能量转换效率方面的优势,适用于新能源发电、储能系统及高效率电源设计等应用场景。; 适合人群:具备电力电子、自动控制及电路理论基础知识,从事电力电子变换器设计、新能源系统开发或相关领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①用于全桥LLC谐振变换器的工作原理教学与参数设计实践;②支撑软开关特性、变频控制策略、效率优化等关键技术的仿真验证与性能评估;③作为科研项目、课程设计或毕业设计中电力电子系统仿真的核心参考模型,促进理论与工程实践的结合。; 阅读建议:建议使用者在掌握LLC谐振变换器基本工作原理的基础上,结合相关电力电子教材与Plecs软件操作指南,通过调整谐振元件参数、负载条件及控制策略进行多工况仿真,深入理解其工作机理与优化方法,并结合实验数据对比验证仿真结果的准确性。

linux应用程序段错误调试

一、堆、栈 在分析段错误之前,先了解一下什么是堆?什么是栈? 堆:一般由开发者分配释放,如果没有释放,程序结束时,在有的OS中可能会被自动释放,分配方式类似于链表。堆的操作方式为,队列优先,先进先出的原则。 栈:由操作系统自动分配,存放函数的参数值,局部变量。栈的操作方式为,先进后出的原则。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。  PUSH:操作在堆栈的顶部加入一个元素...

农村种地人 1111

[HackerRank]BFS Shortest Reach in a Graph

BFS: Shortest Reach in a Graph Challenge Name: BFS: Shortest Reach in a Graph Consider an undirected graph consisting of nnn nodes where each node is labeled from 111 to nnn and the edge betw...

JOHZEN 760

第7篇-SAP MM模块-JIT应用实战解析,从计划协议到JIT供应的关键配置与流程

本文深入解析SAP MM模块中的JIT(Just In Time)供应模式,从计划协议到JIT供应的关键配置与流程。通过动态计划行管理、需求聚合与分解等核心功能,实现精确数量、时间和地点的物料供应。文章详细介绍了主数据准备、计划协议配置、MRP参数精调及EDI集成方案,并提供了实施中的典型问题与解决方案,助力企业优化供应链管理。

weixin_30363509的博客 948

[HackerRank]Sorting Comparator

Sorting: Comparator 这道题让我们将分数从大到小排序,遇到分数相同时候,按名字字母从小到大排序。 一开始我还想着要手写一个快速排序,后来发现这道题其实是一个教学,教我们字母自定义比较函数,并用于STL的函数中。 这样一来思路就很清晰了,比较函数很简单,如果分数高,或者分数相同但字母小,则返回true。 bool comp(Player&amp; a, Player&a...

JOHZEN 453

时间序列分析:ARCH、GARCH、TGARCH与DCC-GARCH波动率模型(含代码)

关注TGARCH模型和DCC-GARCH的应用,通过在沪深300和中证500指数上应用TGARCH和DCC-GARCH模型,揭示这两个指数之间的条件异方差及动态相关性的变化规律。

celiaweiwei的博客 1万+

谷粒商城 - 个人笔记(集群部署篇一)

电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。

知行 4008

[LeetCode]37. Sudoku Solver

37. Sudoku Solver 求解数独。前两天做了验证数独那道题,当时对于遍历hash的使用有了一些感悟,但看这道题时候特别头疼。这两天HackerRank也刷了一下,对于DFS和BFS的理解加深了一些,渐渐的思路就变得清晰。其实是很暴力的解法,但把他转化为代码,对几天前的我来说还有一些难度。经过这两天的学习,总算是可以勉强完成,但参考别人的答案后,果然进步空间还比较大。 我之前的版本,...

JOHZEN 423

使用Hyper-V使用下载下来的macOS安装引导安装macos

然后关闭工具返回安装界面选择第二个reinstall,选择119g那个硬盘。我的资源上传了:macOS Monterey on Hyper-V.7z。设置固件的启动顺序,引导安装盘放到第一位,mac安装110g放第二。选择disk utility格式化那个110g。下载解压的macos引导挂载到虚拟硬盘。其他设置安全禁用,检查禁用,集成都选中。新建一个虚拟硬盘装mac,110g。

viviliving的专栏 3024

[LeetCode]39. Combination Sum

39. Combination Sum 题目要求列出所有的可能情况,我也想到了要使用递归去解决,但具体的方法却很头疼,依旧是参考了大佬的答案,豁然开朗http://www.cnblogs.com/grandyang/p/4419259.html。 DFS中start变量的引用可以防止递归的答案重复,很优秀。 正如大佬所说,返回所有符合要求的解的题目就想到递归,而思路多相似,要新写一个递归的函...

JOHZEN 370

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 763

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1482

[LeetCode]43. Multiply Strings

43. Multiply Strings 这道题要做的是将两个写成了string的数字相乘,思路很清晰,就是手算乘法的式子。我的想法是把这个过程模块化,写作一个字符乘以一个string和错位相加两个部分,可能实力还有欠缺写的不是很简洁。 class Solution { public: string multiply(string num1, string num2) { ...

JOHZEN 340

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

[LeetCode] 32. Longest Valid Parentheses

Longest Valid Parentheses class Solution { public: int longestValidParentheses(string s) { stack&amp;amp;amp;lt;int&amp;amp;amp;gt; stk; int res = 0; int start = 0; for (int i = 0; i&amp;amp;amp;...

JOHZEN 338

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[LeetCode]34. Search for a Range

34. Search for a Range https://leetcode.com/problems/search-for-a-range/description/ 与上一题很相似,原理很清晰,两次二分搜索,一次找前边界一次找后边界,不必在找到target后直接break。但我真的是太讨厌二分搜索了,边界条件实在头疼。 class Solution { public: ve...

JOHZEN 330

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[LeetCode]42. Trapping Rain Water

42. Trapping Rain Water 对于这题我只能说,好好看好好学。 初看题目也有想到用堆栈,但对于写法却一头雾水。 class Solution { public: int trap(vector&lt;int&gt;&amp; height) { stack&lt;int&gt; hIdx; int i = 0, h = 0, res ...

JOHZEN 306

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[LeetCode]40. Combination Sum II

40. Combination Sum II 与上一题几乎一模一样,代码也可以复用。问题在于这次不可以重复,自然就想到了把DFS函数中的start加1。然而由于candidates中存在同样的数字,所以重复不能完全避免。另一方面,重复的数字是有必要出现在combination中的。这又使我苦恼。参考大佬:http://www.cnblogs.com/grandyang/p/4419386.htm...

JOHZEN 290

[LeetCode]36. Valid Sudoku

36. Valid Sudoku 要验证数独的棋盘,就是三个标准,行没有重复,列没有重复以及3x3格子没有重复。最开始的思路是建立1*9的hash表,依据这个标准检测三次,但这样带来一个问题是需要遍历棋盘三次。但其实可以扩大hash表,只需遍历棋盘一次。 class Solution { public: bool row[9][9] = {0}; // 9行的hash bo...

JOHZEN 279

[LeetCode]41. First Missing Positive

41. First Missing Positive 题目要求找出数组中第一个缺失的正数。难点在与时间复杂的要求O(n),空间复杂度要求O(1)。又是一道不会做抄答案的题目。 思路是把遇到的每一个数放到元数组中排序的位置。 class Solution { public: int firstMissingPositive(vector&lt;int&gt;&amp; nums) ...

JOHZEN 279
上一篇: [LeetCode]42. Trapping Rain Water
下一篇: [HackerRank]Sorting Comparator
jinnsjj
博客等级 码龄14年 42粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值