news 2026/6/20 1:12:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决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是字典序最小的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 22:25:00

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

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

作者头像 李华
网站建设 2026/6/19 23:00:13

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

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

作者头像 李华
网站建设 2026/6/19 12:35:07

《把脉行业与技术趋势》-64-何为方向正确:方向是未来的目标,当种群生命的周期、国家宏观政策的生命周期、行业发展的生命周期、企业发展的周期、产品的发展生命周期、个人的职业操作周期,完全契合了,便是正确

一、方向的本质&#xff1a;不是路径&#xff0c;而是势能的汇聚点 方向并非一条固定路线&#xff0c;而是一个动态的、多维共振的目标状态。 单靠个人努力&#xff08;如加班、学习&#xff09;若脱离时代趋势&#xff0c;可能只是“高效地跑偏”&#xff1b;而当你的行动恰…

作者头像 李华
网站建设 2026/6/19 12:36:12

springboot三体科幻社区管理系统 商城 论坛好友私信

目录系统概述核心功能模块技术实现亮点扩展性设计项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统概述 SpringBoot三体科幻社区管理系统是一个集商城、论坛、好友私信功能于一体的综合性平台&#xff…

作者头像 李华
网站建设 2026/6/19 13:48:32

‌大模型测试指标库:17个核心指标

在人工智能飞速发展的今天&#xff0c;大模型&#xff08;如GPT系列、BERT等&#xff09;已广泛应用于自然语言处理、图像识别和决策支持系统。然而&#xff0c;其复杂性给软件测试带来巨大挑战&#xff1a;如何系统评估模型性能&#xff0c;确保可靠性、公平性和效率&#xff…

作者头像 李华
网站建设 2026/6/19 13:50:17

YashanDB安装时报1676端口无法连接故障处理

我们的文章会在微信公众号IT民工的龙马人生和博客网站 ( www.htz.pw )同步更新 &#xff0c;欢迎关注收藏&#xff0c;也欢迎大家转载&#xff0c;但是请在文章开始地方标注文章出处&#xff0c;谢谢&#xff01; 由于博客中有大量代码&#xff0c;通过页面浏览效果更佳。 使用…

作者头像 李华