【2022】贝壳找房秋招C++工程师笔试卷1 牛妹的字符串

news2024/11/25 20:52:31

牛妹的字符串

牛妹拿到了一个只由小写字母组成的字符串s,接下来将字符串执行k次操作,每次操作都会把s中ASCII码最小的字母从s中删除,请返回k次操作之后的字符串s。

参考优秀的网友1:26个小写字母 放在数组里正好由大到小排序。

在这里插入图片描述

memset头文件是 #include cstring

在这里插入图片描述

fill是左闭右开的
在这里插入图片描述

O(n)时间复杂度

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return string字符串
     */
    string NS_String(string s, int k) {
        // write code here
        bool f[26];
        memset(f, false, sizeof(f));
        for (char c:s) {
            f[c-'a'] = true;
        }
        for (int i = 0; i < 26&&k; i++) {   // 小写字母从左到右就是按顺序来的
            if(!f[i]) {  //如果f[i]是false 
                continue; //退出循环 什么也不做
            }
            k--;
            f[i] = false;
        }

        string res = "";  //先初始化为空的字符串
        for (char c:s) {
            if(f[c - 'a']) {  //为true
                res += c;  // 或者这样写res.push_back(c);
            }
        }
        return res;
    }
};

在给定的代码中,使用 += 运算符将字符 c 追加到字符串 res 的末尾。这种拼接字符串的操作是合法的,因为在 C++ 中,字符串可以通过不断追加字符来实现动态扩展

在这个特定的代码片段中,开始时字符串 res 被初始化为空字符串 “”。然后,对字符串 s 中的每个字符 c 进行遍历。如果 f[c - ‘a’] 的值为 true,则说明当前字符 c 符合某种条件(这里使用字母表进行了简化),将其追加到字符串 res 的末尾。

通过使用 += 运算符,每次将一个字符追加到字符串的末尾,字符串 res 在循环结束时将包含满足条件的字符组成的子串。

需要注意的是,在对字符串进行频繁的拼接操作时,由于字符串的动态扩展会导致内存分配和复制操作,可能会影响性能。如果涉及大量的字符串拼接操作,可以考虑使用 std::stringstream 或 std::string 的 reserve() 函数预分配足够的内存,以提高效率。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考优秀的网友2:

执行k次,循环k次,每次循环里面,找到最小字母的时间赋值,时间赋值度O(n),覆盖的时间复杂度也是O(n), k最大是n,所以总体时间复杂度是O(n^2)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param k int整型
     * @return string字符串
     */
    string NS_String(string s, int k) {
        // write code here
        for(int i = 1; i<=k; i++) {  总共删除k次
            char min1 = s[0];
            int n = 0;
            while(s[n]!='\0') {  // O(n)
                if(s[n] < min1) {
                    min1 = s[n];
                }
                n++;
            }
            int a, j;
            for(a=j=0; s[a]!='\0'; a++) { //删除一次
                if(s[a] != min1) { //不是要删除的
                    s[j] = s[a];
                    j++;
                }
            }
                s[j] = '\0';
        }
        return s;
    }
};

优秀的网友3:用map

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return string字符串
     */
    string NS_String(string s, int k) {
        // write code here
        map<char, int> mymap;
        for(char a:s) {
            ++mymap[a];
        }
        for (int i = 0; i<k; i++) {
            int cnt = mymap.begin()->second;
            char c = mymap.begin()->first;
            while (cnt) {
                s.erase(s.find(c), 1);
                --cnt;
            }
            mymap.erase(c);
        }
        return s;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/959462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚合多个电商API接口平台

API接口测试&#xff08;点击免费测试&#xff09; 随着数字化商业时代的到来&#xff0c;API接口已成为电商资源连接利器&#xff0c;也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示&#xff0c;全球互联网企业近3/4的企业持续投入数字化转型&#xff0c…

SpingBoot 过滤器和拦截器有什么区别?

1. 运行顺序不同&#xff08;如图&#xff09;&#xff1a; 过滤器是在 Servlet 容器接收到请求之后&#xff0c;但在 Servlet 被调用之前运行的&#xff1b;而拦截器则是在 Servlet 被调用之后&#xff0c;但在响应被发送到客户 端之前运行的。 2. 配置方式不同&#xff1a; …

划分字母区间【贪心算法】

划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。…

跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展

云数据中心里&#xff0c;为什么需要DCI互通&#xff1f; 云化数据中心&#xff0c;网络资源通过虚拟化技术形成资源池&#xff0c;实现业务与物理网络解耦&#xff0c;通过网络虚拟化&#xff0c;物理网络资源可以被分成多个虚拟网络资源&#xff0c;从而提高网络资源的使用效…

轻松教你实现多设备使用WhatsApp!

小S之前发过几篇关于WhatsApp的使用技巧还有注意事项的文章&#xff0c;发现大家对WhatsApp这个软件还是非常关注的。那么小S今天就再跟大家说一下WhatsApp。 WhatsApp去年更新推出了多设备使用的功能&#xff0c;通过跟主要手机关联&#xff0c;可以在网页、桌面设备、Androi…

代码随想录算法训练营第38天 | ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

文章目录 前言一、理论基础二、509. 斐波那契数三、70. 爬楼梯四、746. 使用最小花费爬楼梯总结 前言 动态规划 一、理论基础 1.基础 2.背包问题 3.打家劫舍 4.股票问题 5.子序列问题 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;…

Java使用pdfbox将pdf转图片

前言 目前比较主流的两种转pdf的方式&#xff0c;就是pdfbox和icepdf&#xff0c;两种我都尝试了下&#xff0c;icepdf解析出来有时候会出现中文显示不出来&#xff0c;网上的解决方式又特别麻烦&#xff0c;不是安装字体&#xff0c;就是重写底层类&#xff0c;所以我选择了p…

Segment Routing原理

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。本文作者&#xff1a; 坏坏 本文链接&#xff1a; http://t.csdn.cn/2fUE5 版权声明&#xff1a; 本博客所有文章除特别声明外&#xff0c;如需转载&#xff0c;请联系作者注明出处并附带本文链接&#xf…

软件开发常说的CI/CD是什么

本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;https://medium.com/gitconnected/basics-of-ci-cd-a98340c60b04 任何软件项目的主要目标都是通过业务流程快速更新迭代来赚钱。我们越快向客户发布新版…

题集-三路划分和三数取中(快排优化)

快排排序是非常快的&#xff0c;但是有一种情况快排是无法进行的。 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题看上去没什么问题&#xff0c;但是如果我们用快排去提交的话&#xff0c;发现快排其实是被针对了的。 有一个样例是这样的。如果我们按照快排的…

SpringCloud入门实战(十五)分布式事务框架Seata简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

前端基础3——JavaScript基础用法

文章目录 一、基本使用1.1 内部方式1.2 外部导入方式1.3 css标签调用js脚本&#xff08;触发事件&#xff09; 二、Windows对象2.1 对象属性2.2 对象方法 三、数据类型3.1 字符串处理3.2 数组处理3.3 对象处理 四、流程控制4.1 操作符4.2 if判断语句4.3 for循环语句4.4 continu…

基于nRF52840 Dongle配合Wireshark对Mesh网络抓包并解析(Nordic)

Mesh网络抓包解析 准备说明配置过滤解密分析 准备 1&#xff09;nRF52840 Dongle 2&#xff09;Mesh节点 3&#xff09;手机作为配网器&#xff08;苹果手机安装nRF Mesh APP&#xff09; 说明 1&#xff09;节点使用的例程目录&#xff1a;nrf5sdkformeshv500src\examples\…

手机录屏方法推荐,3种方法带你玩转

随着智能手机的普及&#xff0c;录制手机屏幕已经成为我们在日常生活中和工作中经常需要进行的操作。有时候&#xff0c;我们想录制一段手机游戏的精彩瞬间或者与朋友分享手机操作的技巧。因此&#xff0c;找到一种方便、简单的手机录屏方法变得尤为重要。本文将介绍手机录屏的…

【IEEE会议】第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023)

第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023) 2023 5th International Conference on Frontiers Technology of Information and Computer 第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023)将在中国青岛举行&#xff0c; 会期是2023年11月17-19日&#xff0c;…

(已解决)ModuleNotFoundError: No module named ‘braceexpand‘

问题描述 import braceexpand, yaml ModuleNotFoundError: No module named braceexpand 解决办法 pip install braceexpand 参考链接https://www.roseindia.net/answers/viewqa/pythonquestions/52026-ModuleNotFoundError-No-module-named-braceexpand.html 其他问题-1 im…

安全狗陈奋:数据安全需要建立在传统网络安全基础之上

8月22日-23日&#xff0c;由创业邦主办的“2023 DEMO WORLD 企业开放式创新大会”在上海顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力…

钢筋水泥中的信仰--爱摸鱼的美工(16)

好久没有更新了&#xff0c;爱摸鱼的美工摸鱼太久可&#xff0c;终于出了一起钢筋水泥中的信仰&#xff0c;希望人们更加坚定个人的信仰。

Pandas 2.1发布了

2023年3月1日&#xff0c;Pandas 发布了2.0版本。6个月后&#xff08;8月30日&#xff09;&#xff0c;更新了新的2.1版。让我们看看他有什么重要的更新。 更好的PyArrow支持 PyArrow是在Panda 2.0中新加入的后端&#xff0c;对于大数据来说提供了优于NumPy的性能。Pandas 2.1…

【RabbitMQ】服务启动成功,无法访问localhost:15672(RabbitMQ Management)

问题描述 RabbitMQ 服务已经启动成功&#xff0c;已经安装rabbitmq_management插件&#xff0c;无法访问RabbitMQ Management&#xff08;http://localhost:15672/&#xff09;。 原因分析 15672端口被Microsoft Edge占用。 解决方案 打开cmd终端&#xff0c;输入指令&#…