C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)

题目描述

给定一个包含n个字符的字符串S,请你编写一个复杂度小于O(n^2)的算法,找出字符串S中出现最多的字符和次数。

思路分析

本题可以采用哈希表来实现。具体的做法是,在扫描整个字符串的过程中记录下每个字符出现的次数,然后遍历所有字符,找出出现次数最多的字符即可。

遍历字符串的时间复杂度为O(n),统计每个字符出现次数的过程为O(n),遍历哈希表找到出现次数最多的字符也是O(n)的。因此总的时间复杂度为O(n)。

代码实现

下面给出C++的代码实现:

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{
    string s = "Hello, World!";
    unordered_map<char, int> cnt_map;

    for (char c : s) {
        cnt_map[c]++;
    }

    char max_char = 0;
    int max_cnt = 0;
    for (auto p : cnt_map) {
        if (p.second > max_cnt) {
            max_cnt = p.second;
            max_char = p.first;
        }
    }

    cout << "Max char: " << max_char << endl;
    cout << "Max cnt: " << max_cnt << endl;

    return 0;
}

示例1:

给定字符串“Hello, World!”,它中出现最多的字符是字符‘l’,出现次数为3。我们可以使用上述代码来验证:

Max char: l
Max cnt: 3

示例2:

然后再给一个稍微复杂一点的字符串:“This is a test sentence to see if our code works properly or not.”,它中出现最多的字符为字符‘ ’(空格),出现次数为11。我们可以使用上述代码来验证:

Max char:
Max cnt: 11

总结

本文介绍了使用哈希表来解决C++中找出字符串中出现最多的字符和次数的问题,并给出了代码实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2) - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++ 中的this指针详解及实例

    C++ 中的this指针详解及实例 什么是this指针? 在 C++ 中,this 指针是一个指向当前对象(成员函数所属的对象)的指针,它能够访问对象的成员变量和成员函数。 在 C++ 中,成员函数拥有一个隐含的参数this指针,该参数指向成员函数所属的对象。编译器会将成员函数的调用转成传递该隐含参数的形式。 如何使用this指针? 使用 this 指针可以…

    C 2023年5月22日
    00
  • #FREERTOS的和heap_4内存分配算法

    FreeRTOS的heap_4内存管理算法具有内存碎片合并的功能,可以有效防止内存碎片产生,使用First fit算法,在实现上与C标准库的malloc类似,但是效率更高且能进行碎片合并回收。以下是个人对源码的解析,有空再补充详细。 一、初始化 static void prvHeapInit( void ) { BlockLink_t *pxFirstFre…

    C语言 2023年4月17日
    00
  • Windows OpenGL ES 图像 GPUImageAmatorkaFilter

    零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES …

    C语言 2023年4月18日
    00
  • 详解C++11中绑定器bind的原理与使用

    详解C++11中绑定器bind的原理与使用 什么是bind bind是C++11中的一个函数绑定器,它可以将一个函数和一些参数绑定起来,形成一个可调用的新函数对象。绑定函数的参数可以在绑定时全部传递,也可以在调用时再进行部分传递。这种参数的绑定机制,可以方便地用来实现回调函数、函数适配器等功能。 bind函数的原型 template<class F, …

    C 2023年5月22日
    00
  • C 运算符

    C 运算符是用于执行特定数学或逻辑操作的特殊符号。在程序中,使用这些运算符来计算表达式的值。下面是一些常用的 C 运算符: 算术运算符 加法运算符(+) 减法运算符(-) 乘法运算符(*) 除法运算符(/) 取模运算符(%) 这些算术运算符用于执行基本的数学运算。例如: int a = 10; int b = 20; int c = a + b; print…

    C 2023年5月10日
    00
  • win7系统中C:\documents and settings文件夹解锁访问图文教程

    “win7系统中C:\documents and settings文件夹解锁访问图文教程” 在Windows 7系统中,用户访问C:\Documents and Settings文件夹时可能会遇到无法访问的情况。这是由于Windows 7系统中,这个文件夹实际上是一个链接,指向了C:\Users文件夹。为了解决这个问题,需要解锁访问C:\Documents …

    C 2023年5月23日
    00
  • C++实现教工考勤信息管理系统

    C++实现教工考勤信息管理系统完整攻略 系统说明 教工考勤信息管理系统是一个基于C++的控制台应用程序,用于管理教工的考勤信息。其主要功能包括:添加教工信息、查找教工信息、浏览教工信息、删除教工信息、按照考勤情况进行筛选等。 系统设计 系统结构 教工考勤信息管理系统采用面向对象的设计思想,其系统结构包含以下几个类: 教工类:用于存储教工的基本信息,包括姓名、…

    C 2023年5月23日
    00
  • 如何在在Vue3中使用markdown 编辑器组件

    以下是在Vue3中使用markdown编辑器组件的攻略: 安装markdown编辑器组件 我们可以使用vue-markdown-editor组件,这是一个基于Vue3的markdown编辑器组件。 在终端中输入下列命令安装: npm install vue3-markdown-editor –save 引入组件 在Vue3项目中,可以使用以下代码引入组件:…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部