解决leetcode第3816题.删除重复字符后的字典序最小字符串

3816.删除重复字符后的字典序最小字符串

难度:困难

问题描述:

给你一个字符串s,它由小写英文字母组成。

你可以进行如下操作任意次(可能为零次):

选择当前字符串s中至少出现两次的任意一个字母并删除其中的一次出现。

返回可以通过这种方式形成的字典序最小的结果字符串。

如果字符串a的某个位置与字符串b不同,且a在该位置的字母比b对应位置的字母在字母表中更靠前,则a被认为是字典序更小的字符串。如果a的前min(a.length,b.length)个字符都与b相同,则较短的字符串字典序更小。

示例1:

输入:s="aaccb"

输出:"aacb"

解释:

可以形成字符串"acb"、"aacb"、"accb"和"aaccb"。其中"aacb"是字典序最小的。

例如,可以选择字母'c'并删除它的第一次出现,得到"aacb"。

示例2:

输入:s="z"

输出:"z"

解释:

无法进行任何操作。只能形成字符串"z"。

提示:

1<=s.length<=105

s仅包含小写英文字母。

问题分析:

处理该问题经历了以下步骤

1先将字符串s中字符重复次数不小于2的字符找出,并将各个字母在字符串中出现的位置以列表形式给出,这些位置都是可能删除的位置。比如对于字符串aabbc,字符a和b重复次数不小于2次,字符a出现的位置为[0,1],字符b出现的位置为[2,3]。把不删除的情况也考虑进去,用-1表示不删除,则上面的列表依次变为[-1,0,1]和[-1,2,3]

2 把不同字母出现的索引号位置转换成跟字符串s等长的二进制字符串,如果不删除则字符串中不出现1,比如a出现的位置为[‘00000’,‘10000’,’01000’],b出现的位置为[‘00000’,‘00100’,’00010’]。如果原字符串s中没有重复的字符,则生成与原字符串等长的全是0的二进制字符串

3 重复的字符只删除一次出现,所以要把删除的位置进行排列组合,就会出现下面的情况:[‘00000’,’00100’,’00010’,’10000’,’10100’,’10010’,’01000’,’01100’,’01010’],这种排列组合可以通过二进制或操作可以实现

4 上面的二进制排列实际上相当于是对原字符串进行处理的蒙板,对原字符串按蒙板进行操作,删除蒙板中1位置对应字符,保留0位置对应的字符,即是进行删除操作之后形成的字符串,如果其中有重复,去掉重复项,再进行字典升序排序,那么其中的第一个字符串即是字典序最小的

程序如下:

#在字符串a中找到所有字符出现的次数,将次数不少于2次的字符保留,并形成元素为[字符,次数]的列表返回 def get_more_than_two_times_char_list(a): a=list(a) b=set(a) t=[] for i in b: t.append([i,a.count(i)]) d=list(i for i in t if i[1]>=2) d.sort(key=lambda x: x[0]) return d #根据字符个数不小于2次的列表,生成每个字符出现的索引号列表并返回 def get_more_than_two_times_char_index_list(a,s): b=[] for i in a: c=[-1] #-1表示不去掉该字符的任何一个索引号 k=0 for j in range(i[1]): n=s.index(i[0],k) c.append(n) k=n+1 b.append(c) return b #根据索引号列表中的数据,将对应索引号位置以二进制的形式置为1 def create_binary_list(nums,n): b='0'*n c=[] for i in nums: if i==-1: c.append(b) else: left = b[:i] right = b[i + 1:] c.append(left + '1' + right) return c #将两种字符出现的索引号二进制数进行或运算,获得组合之后的排列并返回 def get_combination_index(a,b,n): t=[] for i in a: for j in b: xi=int(i,2) xj=int(j,2) k=xi|xj x=bin(k)[2:] len_x=len(x) x=(n-len_x)*'0'+x t.append(x) return t #生成字符个数不少于2的所有字符索引排列并返回 def get_all_combination_index(s): n=len(s) a=get_more_than_two_times_char_list(s) if not a: return [n*'0'] b=get_more_than_two_times_char_index_list(a,s) c=create_binary_list(b[0],n) m=len(b) for i in range(1,m): d=create_binary_list(b[i],n) c=get_combination_index(c,d,n) return c #将二进制形式的字符串解析为原字符串 def get_mask_str(s,mask): n=len(s) s=list(s) mask=list(mask) s_mask=zip(s,mask) s_mask=list(k[0] for k in s_mask if k[1]=='0') return ''.join(s_mask) #主程序 s=input('pls input s=') c = get_all_combination_index(s) t = [] for i in c: b = get_mask_str(s, i) t.append(b) t = list(set(t)) t.sort() if len(t)==1: print(f'无法进行任何操作。只能形成字符串{t[0]}') else: print(f'可以形成的字符串有{t},其中{t[0]}是字典序最小的')

运行实例一

pls input s=ab

无法进行任何操作。只能形成字符串ab

运行实例二

pls input s=aabacb

可以形成的字符串有['aaacb', 'aabac', 'aabacb', 'aabc', 'aabcb', 'aacb', 'abac', 'abacb'],其中aaacb是字典序最小的

运行实例三

pls input s=aaab

可以形成的字符串有['aaab', 'aab'],其中aaab是字典序最小的

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

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

相关文章

四川PE管厂家哪家强?2026年四川PE管厂家推荐与排名,解决定制化与交付期核心痛点 - 品牌推荐

在市政基建、水利工程与城乡建设的持续推动下,PE管道作为关键建材,其市场需求保持稳健增长。然而,面对众多生产厂家,项目决策者与采购负责人常陷入选择困境:如何在确保产品符合国标、满足特定工程场景性能要求的同…

从点击到认知:GEO时代用户搜索行为的根本性变革

引言&#xff1a;当搜索框变成对话窗 想象一下这个场景&#xff1a;一位想要购买洗地机的消费者&#xff0c;不再是在搜索引擎中输入“洗地机 哪个好”&#xff0c;而是直接向DeepSeek、豆包或Kimi提问&#xff1a;“我想买一个适合养宠物家庭、毛发清理能力强的洗地机&#x…

一文掌握k8s的污点和容忍度

节点污点什么是污点&#xff1f;污点&#xff08;Taint&#xff09;是施加在节点上的属性&#xff0c;用于排斥不匹配的Pod。从而避免Pod调度到该节点上。功能上和pod的亲和性相反什么是污点容忍度?容忍度&#xff08;Toleration&#xff09;是定义在Pod上的属性&#xff0c;用…

2026年钢板止水带市场热议:哪些直销厂家表现突出?,止水钢板/穿墙螺杆/u型丝预埋件,钢板止水带直销厂家口碑推荐榜 - 品牌推荐师

在建筑工程防水领域,钢板止水带作为关键防渗屏障,其性能直接影响工程耐久性与安全性。无论是市政管廊、轨道交通还是民用建筑,对止水钢板的材质强度、安装适配性及长期防渗效果均提出严苛要求。在此背景下,具备源头…

2026年钢板止水带市场热议:哪些直销厂家表现突出?,止水钢板/穿墙螺杆/u型丝预埋件,钢板止水带直销厂家口碑推荐榜 - 品牌推荐师

在建筑工程防水领域,钢板止水带作为关键防渗屏障,其性能直接影响工程耐久性与安全性。无论是市政管廊、轨道交通还是民用建筑,对止水钢板的材质强度、安装适配性及长期防渗效果均提出严苛要求。在此背景下,具备源头…

一文掌握k8s的健康检查探针

简介 容器的健康检查探针是指容器运行过程中&#xff0c;需要定时检查容器中应用健康状况。 若未配置健康检查机制&#xff0c;当容器内的应用程序发生异常时&#xff0c;Pod无法感知该异常&#xff0c;也不会自动执行重启操作进行恢复。这样可能导致Pod状态显示为“运行中”&a…

2026年国内优秀的气动单轨吊直销厂家排行,HQ气动葫芦/30吨气动葫芦/牧田气动葫芦,气动单轨吊制造企业怎么选择 - 品牌推荐师

随着工业4.0时代对高效、安全、环保设备的迫切需求,气动单轨吊凭借其无火花、防爆、适应恶劣工况等特性,成为煤矿、化工、冶金、船舶等领域的关键设备。然而,国内市场技术参差不齐,部分厂商通过“小吨位多链条”拼…

重构内容战略:从SEO关键词到GEO语境单元的思维跃迁

引言&#xff1a;当“内容为王”遭遇AI读者 2024年&#xff0c;一家知名家电品牌的营销负责人发现了一个悖论&#xff1a;其官网一篇精心优化、关键词布局完美的“高端冰箱选购指南”在百度搜索排名前三&#xff0c;但来自各类AI助手的咨询量却远低于一篇发布在知乎专栏、语言…

2026年天津离婚房产分割律师联系电话推荐:高效咨询与权益保障 - 品牌推荐

在婚姻关系走到尽头时,房产作为家庭财产中最核心、价值最高的部分,其分割往往成为离婚纠纷中最复杂、最关键的环节。天津作为一座快速发展的直辖市,涉及婚后购房、父母出资、贷款偿还、房产增值等情形的离婚房产分割…

一文掌握k8s的升级更新策略

简介 K8S中通过spect.strategy来定义新的 Pod 替换为旧的Pod的策略。策略类型分为&#xff1a;重建策略&#xff08;Recreate&#xff09;或滚动升级策略&#xff08;RollingUpdate&#xff09;&#xff0c;默认为 RollingUpdate 两种升级策略 1.Recreate策略 在这种策略中&…

数据驱动与敏捷优化:GEO时代的营销效能度量与增长黑客

引言&#xff1a;当“流量仪表盘”失灵某在线教育公司的CMO发现了一个令人困惑的现象&#xff1a;公司网站的SEO数据一切正常——搜索曝光量、点击率、访问时长均在增长&#xff0c;但新用户的咨询转化率却停滞不前。进一步挖掘发现&#xff0c;大量原本通过搜索“小学数学辅导…

2026年天津婚姻律师联系电话推荐:精选推荐与使用指南 - 品牌推荐

在婚姻家庭面临变故或法律纠纷时,寻求一位专业、可靠且富有经验的婚姻律师,是维护自身合法权益、妥善解决矛盾的关键一步。特别是对于天津地区的居民而言,找到一位熟悉本地司法实践、精通婚姻家事法律的律师,能够为…

生态博弈与未来前瞻:GEO将如何重塑互联网、商业与竞争格局

引言&#xff1a;新大陆的规则制定者之战想象一下&#xff0c;未来某天&#xff0c;你询问AI“计划一次去云南的深度文化之旅”&#xff0c;AI不仅推荐线路、酒店和美食&#xff0c;更直接为你预订了由特定合作伙伴提供的“非遗手工艺体验课”、某小众设计师酒店的房型&#xf…

如何在网页中实现跨平台的大文件切片上传?

一个被20G文件折磨的.NET程序员的求生指南 “甲方爸爸说要兼容IE8&#xff1f;还要20G文件上传&#xff1f;预算100块&#xff1f;” —— 当我看到需求文档时&#xff0c;手里的泡面突然就不香了…&#x1f35c; 技术方案&#xff1a;在刀尖上跳舞 前端部分&#xff1a;与I…

信创环境下如何选择合适的大文件上传插件?

大文件传输系统建设方案&#xff08;ASP.NET技术栈&#xff09; 一、项目背景与核心需求 作为公司项目负责人&#xff0c;针对产品部门提出的100G级大文件传输需求&#xff0c;需构建一套高兼容性、高稳定性、全浏览器支持的解决方案。核心需求如下&#xff1a; 功能需求&…

信任链重构:当AI成为品牌与消费者之间的“信任中介”

引言&#xff1a;信息环境剧变下的信任新课题 设想两位潜在车主的研究路径&#xff1a;一位通过传统搜索引擎&#xff0c;浏览多家汽车媒体评测、综合论坛车主口碑&#xff0c;耗时良久后得出结论“品牌X的自动驾驶功能比较可靠”。另一位则向AI助手提问&#xff1a;“当前20-…

WordPress开发者如何自定义Word导入的格式映射规则?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

政务站群如何配置WordPress实现PDF目录结构化提取?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

农业信息化平台如何通过WordPress处理Excel批量导入?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

智能制造MES系统如何调用WordPress的PPT转码接口?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…