LeetCode 1209. 删除字符串中的所有相邻重复项 II(栈)

1. 题目

给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。

你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。

在执行完所有删除操作后,返回最终得到的字符串。

本题答案保证唯一。

示例 1:
输入:s = "abcd", k = 2
输出:"abcd"
解释:没有要删除的内容。示例 2:
输入:s = "deeedbbcccbdaa", k = 3
输出:"aa"
解释: 
先删除 "eee""ccc",得到 "ddbbbdaa"
再删除 "bbb",得到 "dddaa"
最后删除 "ddd",得到 "aa"示例 3:
输入:s = "pbbcggttciiippooaais", k = 2
输出:"ps"提示:
1 <= s.length <= 10^5
2 <= k <= 10^4
s 中只含有小写英文字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 栈解题

  • 将当前字符和其连续的个数存入栈中
  • 个数达到 k 时出栈 k 个
class Solution {
public:string removeDuplicates(string s, int k) {int i, count = 0;stack<pair<char,int>> stk;char prev = '*';for(i = 0; i < s.size(); ++i){if(prev != s[i]){count = 1;stk.push(make_pair(s[i],count));prev = s[i];}else//prev == s[i]{count = stk.top().second + 1;stk.push(make_pair(s[i],count));prev = s[i];if(count == k){while(count--)stk.pop();if(!stk.empty())prev = stk.top().first;elseprev = '*';}}}string ans;while(!stk.empty()){ans += stk.top().first;stk.pop();}reverse(ans.begin(),ans.end());return ans;}
};

在这里插入图片描述

  • 优化上面程序:相同的不必压栈了,直接改pair的second计数+1,减少压栈,弹栈时间
class Solution {
public:string removeDuplicates(string s, int k) {int i, count = 0;stack<pair<char,int>> stk;char prev = '*';for(i = 0; i < s.size(); ++i){if(prev != s[i]){count = 1;stk.push(make_pair(s[i],count));prev = s[i];}else//prev == s[i]{stk.top().second++;//直接+1if(stk.top().second == k){stk.pop();if(!stk.empty())prev = stk.top().first;elseprev = '*';}}}string ans;while(!stk.empty()){count = stk.top().second; while(count--)   ans += stk.top().first;stk.pop();}reverse(ans.begin(),ans.end());return ans;}
};

在这里插入图片描述

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

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

相关文章

YUI经验谈 - 自定义事件默认行为

纵观主流JS库和框架&#xff0c;YUI在自定义事件方面做的尤为出色。如果需要挑出一个代表性的feature&#xff0c;那么非事件默认行为莫属。 是什么 YUI自定义事件在总体上模仿了DOM事件的设计思想。DOM中的一些事件是有默认行为的&#xff0c;详细见DOM3 Event - Default acti…

美团NLP中心算法实习生招聘

致力于连接最靠谱的算法岗与最强的求职者招聘贴投放请联系微信xixiaoyao-1岗位职责&#xff1a;NLP算法研发&#xff0c;例如文本挖掘、知识预训练、知识&多模态预训练等知识图谱构建核心技术相关论文撰写岗位要求&#xff1a;北京高校在校大学生。&#xff08;2023年毕业优…

论文浅尝 | 改善多语言KGQA的 Zero-shot 跨语言转换

笔记整理&#xff1a;谭亦鸣, 东南大学博士生来源&#xff1a;NAACL21链接&#xff1a;https://aclanthology.org/2021.naacl-main.465/概述为了扩展多语言知识图谱问答的应用&#xff0c;Zero-shot方法成为一个研究趋势。在Zero-shot的设定下&#xff0c;通过高资源语言的训练…

LeetCode 1172. 餐盘栈(栈 + set)

1. 题目 我们把无限数量 ∞ 的栈排成一行&#xff0c;按从左到右的次序从 0 开始编号。每个栈的的最大容量 capacity 都相同。 实现一个叫「餐盘」的类 DinnerPlates&#xff1a; DinnerPlates(int capacity) - 给出栈的最大容量 capacity。void push(int val) - 将给出的正…

Hive SQL的编译过程

Hive是基于Hadoop的一个数据仓库系统&#xff0c;在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建&#xff0c;每天执行近万次的Hive ETL计算流程&#xff0c;负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在几次升级Hive的过程中&…

Prompt tuning新工作,五个参数解决下游任务 fine-tuning

文 | 小伟编 | 小轶前言自从Google石破天惊地发布Bert以来&#xff0c;NLP就进入了预训练语言模型的时代。众所周知&#xff0c;我们可以用预训练语言模型来学习各种各样的任务&#xff0c;即使它们的特征空间有比较大的差异。那么预训练语言模型为什么会有这种泛化能力呢&…

会议交流 | 如何将图谱实体与关系更好的向量化,并基于推理扩充知识边界?——DataFun Summit2022知识图谱在线峰会...

背景介绍知识图谱是对人类先验知识的概括&#xff0c;具有重要的学术价值和广泛的应用前景。在深度学习广泛应用环境下&#xff0c;知识图谱的表示学习通过将图谱实体和关系向量化&#xff0c;便于利用深度学习技术实现异质信息融合&#xff1b;同时&#xff0c;基于这种图谱表…

真正的高阶特征交叉:xDeepFM与DCN-V2

文 | 水哥源 | 知乎Saying1. xDeepFM和DCN-V2是真正的高阶交叉&#xff0c;和前面讲的High Order Factorization Machine&#xff08;HOFM&#xff09;又有着千丝万缕的联系。某种简化下&#xff0c;都能退化为HOFM的形式2. 如图3. 推荐模型迭代的时候要平衡涨点和复杂度的关系…

学术会议 | 中国杭州举办——第21届国际语义网大会​ISWC2022 Call for Papers

中国杭州举办&#xff01;ISWC2022 Call for Papers.ISWC(International Semantic Web Conference)是语义网和知识图谱领域的国际顶级学术会议&#xff0c;2022年10月23-27日&#xff0c;ISWC将在中国杭州举行&#xff0c;通过线上线下结合的方式&#xff0c;汇聚全世界相关的科…

LeetCode 82. 删除排序链表中的重复元素 II(链表)

1. 题目 给定一个排序链表&#xff0c;删除所有含有重复数字的节点&#xff0c;只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5示例 2: 输入: 1->1->1->2->3 输出: 2->3来源&#xff1a;力…

从 ACL’22 投稿情况,速览当下 NLP 研究热点!

文 | Yimin_饭煲编 | 小轶卖萌屋的作者们&#xff0c;最近可真是忙秃了头~&#xff0c;不仅要苦哈哈地赶 ACL 2022 提前了两个月的Deadline&#xff0c;还要尽心尽力为读者们提供高质量的内容。如果大家心疼卖萌屋的作者们的话&#xff0c;还请多多一键三连:)ACL2022 全部转向了…

开源开放 | DeepKE发布新版本:支持低资源、长篇章、多任务的图谱抽取开源框架(浙江大学)...

OpenKG地址&#xff1a;http://openkg.cn/tool/deepkeGitHub地址&#xff1a;https://github.com/zjunlp/deepkeGitee地址&#xff1a;https://gitee.com/openkg/deepkeDeepKE网站&#xff1a;http://deepke.zjukg.org/CN/index.html开放许可协议&#xff1a;GPL 3.0贡献者&…

LeetCode 478. 在圆内随机生成点(概率)

1. 题目 给定圆的半径和圆心的 x、y 坐标&#xff0c;写一个在圆中产生均匀随机点的函数 randPoint 。 说明: 输入值和输出值都将是浮点数。圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。圆周上的点也认为是在圆中。randPoint 返回一个包含随机点的x坐标和y坐标…

11月AI大事件回顾:GPT3开放使用/女娲视觉大模型/AE文艺复兴/...

编 | iven感谢提供本期内容的 ZenMoore、 jxyxiangyu、付瑶大家好&#xff5e; 11月的新闻速报来啦&#xff01;上个月不知道大家有没有忙着写文章&#xff0c;反正小编是这样的&#xff1a;好啦&#xff0c;让我们快来回顾上个月的 AI 大新闻吧&#xff01;学术进展何恺明 Mas…

开源开放 | 开源立体化漏洞情报知识图谱(四维创智)

OpenKG地址&#xff1a;http://openkg.cn/dataset/vuln-sprocket开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;四维创智&#xff08;李德斌&#xff0c;孙基栩&#xff0c;鲍晨阳&#xff09;1. 前言随着时间的推移&#xff0…

LeetCode 515. 在每个树行中找最大值(层序遍历)

1. 题目 您需要在二叉树的每一行中找到最大的值。 示例&#xff1a; 输入: 1/ \3 2/ \ \ 5 3 9 输出: [1, 3, 9]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row 著作…

GBDT是如何成为推荐系统顶级工具人的?

文 | 水哥源 | 知乎Saying1. 集成学习的ensemble注意一定要读作昂三姆包而不是印三姆包&#xff0c;一天一个算法工程师装x小技巧2. 区别bagging和boosting的准则是&#xff0c;先训练的模型对于后训练的模型是否有影响3. GBDT中&#xff0c;B&#xff08;boosting&#xff09;…

会议交流 | 如何提升推荐系统的可解释性?——DataFunSummit2022知识图谱在线峰会...

背景介绍知识图谱及特征学习结合智能推荐&#xff0c;可解决数据稀疏性及冷启动问题&#xff0c;更好的提升推荐决策场的准确性、多样性及可解释性&#xff0c;进而提升各个场景的推荐决策效率和体验。3月12日13:30-16:50&#xff0c;在DataFunSummit2022&#xff1a;知识图谱在…

LeetCode 143. 重排链表(链表反转+快慢指针)

1. 题目 给定一个单链表 L&#xff1a;L0→L1→…→Ln-1→Ln &#xff0c; 将其重新排列后变为&#xff1a; L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为…

论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全

笔记整理&#xff1a;姚祯&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱表示学习&#xff0c;图神经网络。论文引用&#xff1a;Liu S, Grau B, Horrocks I, et al. INDIGO: GNN-based inductive knowledge graph completion using pair-wise encoding[J]. Adva…