笔试题1 -- 吃掉字符串中相邻的相同字符(点击消除_牛客网)

吃掉字符串中相邻的相同字符

文章目录

  • 吃掉字符串中相邻的相同字符
    • 题目重现
    • 解法一:(基于 erase() 函数实现)
    • 解法二:(利用 栈 辅助实现)
    • 总结

题目链接: 点击消除_牛客网

题目重现

牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串 “abbc” 点击后可以生成 “ac”。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述

一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述

一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

解法一:(基于 erase() 函数实现)

缺点:

  • 效率问题:使用 erase() 函数会导致字符串中的元素频繁移动,特别是在字符串较长时,这会造成较大的性能开销。
  • 复杂的边界处理:代码中需要多次检查迭代器是否到达字符串的末尾,这增加了代码的复杂性。

代码示例:

void eatCharacters(std::string& s)
{auto cur = s.begin();auto pre = cur + 1;for (; pre != s.end(); pre++, cur++){while (*cur == *pre){bool cur_is_begin = (cur == s.begin()) ? true : false;auto cur_l = cur - 1;pre = s.erase(cur, pre + 1);if (pre == s.end()) { return; }		// 注意这里判断避免后面越界if (cur_is_begin){cur = pre;pre++;if (pre == s.end()) { return; }		// 注意这里判断避免后面越界}else{cur = cur_l;}}}
}void test() {std::string input;std::cin >> input; // 从标准输入读取字符串eatCharacters(input);if (input.size() == 0){cout << 0 << endl;}else{std::cout << input << std::endl; // 输出最终状态}
}

提交截图:

在这里插入图片描述

评价:

时间复杂度:

  • 最坏情况下,每次 erase() 调用都可能导致整个字符串的复制,因此时间复杂度为 O(n^2),其中 n 是字符串的长度。

空间复杂度:

  • 由于直接在原字符串上操作,空间复杂度为 O(1)

实际运行时间:

  • 在字符串较短或者需要消除的字符对较少时,这种方法可能表现得相当快。
  • 在字符串较长且有大量相邻字符对需要消除时,性能会显著下降。

适用场景:

  • 当处理的字符串较短,且内存资源受限时,这种方法可能更合适。

解法二:(利用 栈 辅助实现)

缺点:

  • 空间复杂度:虽然时间复杂度有所优化,但是这种方法需要额外的空间来存储栈。

代码示例:

void eatCharacters(std::string& s) {stack<char> st;for (auto e : s){if (st.empty() || st.top() != e) { st.push(e); }else {st.pop();}}s.clear();while (!st.empty()){s = st.top() + s;st.pop();}
}void test() {std::string input;std::cin >> input; // 从标准输入读取字符串eatCharacters(input);if (input.size() == 0){cout << 0 << endl;}else{std::cout << input << std::endl; // 输出最终状态}}

提交截图:

在这里插入图片描述

评价:

时间复杂度:

  • 由于每个字符只被处理一次,时间复杂度为 O(n)

空间复杂度:

  • 需要一个额外的栈来存储字符,最坏情况下空间复杂度为 O(n)

实际运行时间:

  • 对于任何长度的字符串,这种方法都能保持稳定的性能。
  • 在处理大量数据时,这种方法的性能优势更加明显。

适用场景:

  • 当处理的字符串非常长,或者需要频繁执行消除操作时,这种方法更为高效。

总结

​ 在选择解法时,应考虑问题的规模和性能要求。对于小规模数据,两种方法都可以工作得很好,但解法一可能更节省内存。对于大规模数据,解法二的性能优势将非常明显,尽管它需要更多的内存。在实际应用中,如果内存不是问题,推荐使用解法二,因为它提供了更好的时间效率和代码的可维护性。
执行消除操作时,这种方法更为高效。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

两步解决 Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

腾讯云人脸服务开通详解:快速部署,畅享智能体验

请注意&#xff0c;在使用人脸识别服务时&#xff0c;需要确保遵守相关的法律法规和政策规定&#xff0c;保护用户的合法权益&#xff0c;并依法收集、使用、存储用户信息。此外&#xff0c;腾讯云每个月会提供一定次数的人脸识别调用机会&#xff0c;对于一般的小系统登录来说…

故障转移-redis

4.4.故障转移 集群初识状态是这样的&#xff1a; 其中7001、7002、7003都是master&#xff0c;我们计划让7002宕机。 4.4.1.自动故障转移 当集群中有一个master宕机会发生什么呢&#xff1f; 直接停止一个redis实例&#xff0c;例如7002&#xff1a; redis-cli -p 7002 sh…

pip如何查看Python某个包已发行所有版本号?

以matplotlib包为例子&#xff0c; pip install matplotlib6666 6666只是胡乱输入的一个数&#xff0c;反正输入任意一个不像版本号的数字都可以&#xff5e; matplotlib所有版本号如下&#xff0c; 0.86, 0.86.1, 0.86.2, 0.91.0, 0.91.1, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.2.1…

盲人安全导航技巧:科技赋能让出行更自如

作为一名资深记者&#xff0c;长期关注并报道无障碍领域的发展动态。今日&#xff0c;我将聚焦盲人安全导航技巧&#xff0c;探讨这一主题下科技如何赋能视障人士实现更为安全、独立的出行。一款融合了实时避障、拍照识别物体及场景功能的盲人出行辅助应用叫做蝙蝠避障&#xf…

机器学习算法——决策树算法详细解读

决策树&#xff08;Decision Tree&#xff09;是在已知各种情况发生概率的基础上&#xff0c;通过构成决策树来求取净现值的期望值大于等于零的概率&#xff0c;评价项目风险&#xff0c;判断其可行性的决策分析方法&#xff0c;是直观运用概率分析的一种图解法。由于这种决策分…

Ansys在压力容器行业的典型应用(下)

压力容器热棘轮效应安定性分析 • 设计中的难点 ‐ 平均应力和交变载荷联合作用时&#xff0c;每次循环可能使容器产生一个不可逆的塑性应变增量&#xff0c;当塑性应变值递增至材料塑性被耗尽时&#xff0c;就会发生断裂。这种断裂与一般的疲劳破坏不同&#xff0c;一般的疲…

爱帮供应链邀您参观2024杭州快递物流供应链与技术装备展览会

2024年7月8-10日|杭州国际博览中心 同期举办&#xff1a;2024中国数字物流技术与应用展 2024国际电商物流包装产业展 2024新能源商用车、物流车展 展会介绍 本届展会致力于全面展示快递物流上下游领域的创新解决方案&#xff0c;涵盖快递物流供应链、智能装备、AGV机器人与…

实现 Table 的增加和删除,不依赖后端数据回显

需求 删除前 删除后 分析 首先写一个 Table <a-card style"width:100%"><template#extra><a-button type"text" click"addSelectItem" style"margin-right: 5px">添加</a-button><a-button type&quo…

基于JavaWeb开发的springboot网约车智能接单规划小程序[附源码]

基于JavaWeb开发的springboot网约车智能接单规划小程序[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…

算法思想总结:链表

一、链表的常见技巧总结 二、两数相加 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//利用t来存进位信息int t0;ListNode*newheadnew ListNode(0);//创建一个哨兵节点&#xff0c;方便尾插List…

基于Docker构建CI/CD工具链(十)总结

我们用九篇文章简单的介绍了使用Docker构建CICD工具链&#xff0c;希望对你的工作有所帮助。 基于Docker构建CI/CD工具链&#xff08;一&#xff09;构建基础工具镜像 基于Docker构建CI/CD工具链&#xff08;二&#xff09;快速搭建Gitlab代码库 基于Docker构建CI/CD工具链&…

RA4000CE为汽车动力传动系统提供解决方案

目前汽车电气化的水平越来越高&#xff0c;其中比较显著的一个发展方向就是将发动机管理系统和自动变速器控制系统&#xff0c;集成为动力传动系统的综合控制(PCM)。作为汽车动力的核心部件&#xff0c;通过电子系统的运用&#xff0c;将外部多个传感器和执行环节的数据进行统一…

第十五届蓝桥杯题解-好数

题目大意&#xff1a;一个数的低位为奇数&#xff0c;次低位为偶数&#xff0c;以此类推的数成为好数&#xff0c;例如&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;9 给定一个n&#xff0c;求1-n所有好数的个数&#xff0c;n<1e7 思路&#xff1a;一…

媒体邀约的好处?怎么邀请媒体?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约的好处主要体现在提高品牌知名度、扩大受众群体以及与媒体建立良好的合作关系。 媒体邀约是一种有效的公关策略&#xff0c;通过吸引媒体关注来促进信息的传播。它可以帮助组织…

速看!DaVinci Resolve Studio19.0 下载地址及安装教程

DaVinci Resolve是一款全面的视频后期制作软件&#xff0c;由Blackmagic Design开发。它集成了视频编辑、颜色校正、音频后期处理和视觉效果合成等功能&#xff0c;被广泛应用于电影、电视和广告制作等领域。 DaVinci Resolve提供了强大的视频编辑工具&#xff0c;用户可以进行…

【智能算法】鸭群算法(DSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;Zhang等人受到自然界鸭群觅食行为启发&#xff0c;提出了鸭群算法&#xff08;Duck Swarm Algorithm, DSA&#xff09;。 2.算法原理 2.1算法思想 DSA基于自然界鸭群觅食过程&…

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法。以下是一般而言的目标检测实现步骤&#xff1a; 1、数据收集与标注&#xff1a;首先需要收集包含目标物体的大量图像数据&#xff0c;并对这些图像进行标注&#xff0c;标注出目标物体的位置和类别信息。这些…