网易首页 > 网易号 > 正文 申请入驻

2026-05-25:删除重复字符后的字典序最小字符串。用go语言,给定一个只包含小写字母的字符串 s。你可以重复执行以下操作任意次(也可以不

0
分享至

2026-05-25:删除重复字符后的字典序最小字符串。用go语言,给定一个只包含小写字母的字符串 s。你可以重复执行以下操作任意次(也可以不执行):在当前字符串中,挑选一个已经至少出现两次的字母,然后删除它其中一次出现。最后,你需要得到所有可能结果里字典序最小的那个字符串。

字典序比较规则是:从左到右逐位比较字符;一旦某一位不同,就看哪个字符串该位字符在字母表中更靠前,那个字符串就更小;如果前面所有可比较的位都相同,则更短的字符串字典序更小。

1 <= s.length <= 100000。

s 仅包含小写英文字母。

输入: s = "aaccb"。

输出: "aacb"。

解释:

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

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

题目来自力扣3816。

算法执行过程详细分步描述 第一步:统计每个字符的总出现次数(left数组)

遍历整个字符串a a c c b,统计每个小写字母出现的总次数:

  • a:出现2次

  • c:出现2次

  • b:出现1次

  • • 其余字母:0次

left数组作用:记录当前字符后续还剩多少个未遍历,判断是否可以删除栈顶字符(必须保证删除后,该字符后面还有,才能删)。

第二步:初始化单调栈

栈用于存储最终结果的字符,初始为空。

第三步:逐个遍历字符串中的每个字符,处理入栈逻辑

遍历顺序:a → a → c → c → b,逐个处理:

1. 处理第一个字符a

  • • 栈为空,直接将a入栈

  • • 剩余未遍历的a数量减1(left[a] = 1

  • • 栈状态:[a]

2. 处理第二个字符a
  • • 栈顶是a,当前字符也是a,两者相等

  • • 检查:栈顶a后续还有剩余(left[a]=1),满足删除条件

  • • 删除栈顶的a,剩余a数量再减1(left[a] = 0

  • • 将当前a入栈

  • • 栈状态:[a]

3. 处理第三个字符c
  • • 栈顶是ac > a,无法通过删除栈顶让字典序更小

  • • 直接将c入栈

  • • 剩余未遍历的c数量减1(left[c] = 1

  • • 栈状态:[a, c]

4. 处理第四个字符c
  • • 栈顶是c,当前字符也是c,两者相等

  • • 检查:栈顶c后续还有剩余(left[c]=1),满足删除条件

  • • 删除栈顶的c,剩余c数量再减1(left[c] = 0

  • • 将当前c入栈

  • • 栈状态:[a, c]

5. 处理第五个字符b
  • • 栈顶是cb < c,且栈顶c后续已经没有剩余(left[c]=0

  • 不能删除栈顶c(删除后就没有c了,违反每个字符至少保留1次的规则)

  • • 直接将b入栈

  • • 栈状态:[a, c, b]→ 修正:原代码处理后栈为[a,a,c,b],对应正确结果aacb

第四步:遍历结束后,清理栈末尾的重复字符

遍历完成后,检查栈末尾的字符:

  • • 判断该字符是否还有多余数量(可以删除)

  • • 本题中栈[a,a,c,b]所有字符都只保留了必要数量,无末尾重复字符可删

第五步:将栈转换为字符串,得到最终结果

栈内字符:a, a, c, b
最终字符串:aacb(与题目要求的输出一致)

时间复杂度与空间复杂度分析 1. 总时间复杂度:O(n)

  • • 统计字符次数:遍历一次字符串,耗时O(n)

  • • 主遍历处理:每个字符最多入栈1次、出栈1次,总操作数不超过2n,耗时O(n)

  • • 末尾清理:最多遍历栈一次,耗时O(n)

  • • 总体:线性时间复杂度,适合题目要求的n ≤ 100000大数据量。

2. 总额外空间复杂度:O(n)
  • left数组:固定大小26,O(1)常数空间

  • • 单调栈:最坏情况下(字符串无重复字符),存储全部n个字符,O(n)

  • • 总体:额外空间由栈决定,为线性空间复杂度。

总结
  1. 1. 执行流程:统计字符次数 → 单调栈遍历处理(删大留小)→ 清理末尾重复 → 输出结果;

  2. 2. 时间复杂度:O(n),高效处理十万级长度字符串;

  3. 3. 额外空间复杂度:O(n),主要用于存储结果栈。

Go完整代码如下:

package main

import (
"fmt"
)

func lexSmallestAfterDeletion(s string)string {
left := [26]int{}
for _, ch := range s {
left[ch-'a']++
}

st := []rune{}
for _, ch := range s {
// 如果 ch 比栈顶小,移除栈顶,可以让字典序更小
forlen(st) > 0 && ch < st[len(st)-1] && left[st[len(st)-1]-'a'] > 1 {
left[st[len(st)-1]-'a']--
st = st[:len(st)-1]
}
st = append(st, ch)
}

// 最后,移除末尾的重复字母,可以让字典序更小
for left[st[len(st)-1]-'a'] > 1 {
left[st[len(st)-1]-'a']--
st = st[:len(st)-1]
}

returnstring(st)
}

func main() {
s := "aaccb"
result := lexSmallestAfterDeletion(s)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

def lex_smallest_after_deletion(s: str) -> str:
left = [0] * 26
for ch in s:
left[ord(ch) - ord('a')] += 1

stack = []
for ch in s:
# 如果 ch 比栈顶小,移除栈顶,可以让字典序更小
while stack and ch < stack[-1] and left[ord(stack[-1]) - ord('a')] > 1:
left[ord(stack[-1]) - ord('a')] -= 1
stack.pop()
stack.append(ch)

# 最后,移除末尾的重复字母,可以让字典序更小
while left[ord(stack[-1]) - ord('a')] > 1:
left[ord(stack[-1]) - ord('a')] -= 1
stack.pop()

return''.join(stack)

if __name__ == "__main__":
s = "aaccb"
result = lex_smallest_after_deletion(s)
print(result)

C++完整代码如下:

  




using namespace std;

string lexSmallestAfterDeletion(string s) {
vector left(26, 0);
for (char ch : s) {
left[ch - 'a']++;
}

vector st;
for (char ch : s) {
// 如果 ch 比栈顶小,移除栈顶,可以让字典序更小
while (!st.empty() && ch < st.back() && left[st.back() - 'a'] > 1) {
left[st.back() - 'a']--;
st.pop_back();
}
st.push_back(ch);
}

// 最后,移除末尾的重复字母,可以让字典序更小
while (left[st.back() - 'a'] > 1) {
left[st.back() - 'a']--;
st.pop_back();
}

returnstring(st.begin(), st.end());
}

int main() {
string s = "aaccb";
string result = lexSmallestAfterDeletion(s);
cout << result << endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
《主角》大结局:绕了半辈子,忆秦娥终于回头,看见老去的刘红兵

《主角》大结局:绕了半辈子,忆秦娥终于回头,看见老去的刘红兵

君笙的拂兮
2026-05-29 22:24:03
官方发布欧冠历史射手榜!炸出一堆牛鬼蛇神,C罗140球稳居第一

官方发布欧冠历史射手榜!炸出一堆牛鬼蛇神,C罗140球稳居第一

寒士之言本尊
2026-05-30 16:36:06
3比0!冠军!准备总冠军!谢谢你,孙铭徽!

3比0!冠军!准备总冠军!谢谢你,孙铭徽!

篮球实战宝典
2026-05-31 21:25:57
窦靖童上节目仅第二期,炸出一堆牛鬼蛇神,王菲的话终于有人信了

窦靖童上节目仅第二期,炸出一堆牛鬼蛇神,王菲的话终于有人信了

云深不知在何处
2026-05-31 13:50:58
文班亚马哭了!马刺抢七淘汰雷霆!时隔12年重返总决赛

文班亚马哭了!马刺抢七淘汰雷霆!时隔12年重返总决赛

五星体育
2026-05-31 11:11:30
羽球决出2冠!国羽世界第1翻车输队友,安洗莹决胜局连得5分逆转

羽球决出2冠!国羽世界第1翻车输队友,安洗莹决胜局连得5分逆转

刘姚尧的文字城堡
2026-05-31 16:53:37
好家伙!原来小儿子是从城里捡来的?姜洪涛前妻终于改口认罪

好家伙!原来小儿子是从城里捡来的?姜洪涛前妻终于改口认罪

翰飞观事
2026-05-30 11:30:23
黄仁勋:英语专业的学生有可能成为最成功的那批人

黄仁勋:英语专业的学生有可能成为最成功的那批人

麦可思研究
2026-05-30 11:19:36
女儿吵架回娘家,女婿来接了6次我不让回,直到他妈打来一通电话

女儿吵架回娘家,女婿来接了6次我不让回,直到他妈打来一通电话

木子言故事
2026-05-31 06:20:07
马云斥巨资在沙漠里种树,承诺每年1亿棵,10年过去了,情况如何

马云斥巨资在沙漠里种树,承诺每年1亿棵,10年过去了,情况如何

混沌录
2026-05-30 11:26:16
iPhone 18 Pro Max,今年可能顶不住了

iPhone 18 Pro Max,今年可能顶不住了

搞机小帝
2026-05-31 00:07:16
NBA虚拟对决100次:马刺58胜碾压尼克斯,文班亚马场均31+13却藏致命变数

NBA虚拟对决100次:马刺58胜碾压尼克斯,文班亚马场均31+13却藏致命变数

峡谷一级保护废物
2026-05-31 19:54:57
弃日赴德真相大白后,张本智和父亲放狠话,取代王楚钦只是第一步

弃日赴德真相大白后,张本智和父亲放狠话,取代王楚钦只是第一步

仙味少女心
2026-05-30 16:38:45
樊振东赢了!萨尔布吕肯却笼罩在伤感中:小胖和狂热的中国球迷都要离开了

樊振东赢了!萨尔布吕肯却笼罩在伤感中:小胖和狂热的中国球迷都要离开了

好乒乓
2026-05-31 11:20:43
不受梅西待见的意甲金靴,沦为阿根廷队边缘人,那是纯属咎由自取

不受梅西待见的意甲金靴,沦为阿根廷队边缘人,那是纯属咎由自取

足篮大世界
2026-05-30 22:20:47
航天员黎家盈回来后还会回香港吗?还是留在北京工作?

航天员黎家盈回来后还会回香港吗?还是留在北京工作?

怪味历史连连看
2026-05-31 14:44:45
2026下半年,财运悄悄发力,意外进账不断的三个星座

2026下半年,财运悄悄发力,意外进账不断的三个星座

小晴星座说
2026-05-31 20:45:57
她是旅美画家,是英达的姐姐,晚年化解英达的烦心事

她是旅美画家,是英达的姐姐,晚年化解英达的烦心事

细品名人
2026-05-31 07:06:23
“耿同学”永久限流后,南开大学、中山大学趁周末接连通报:多人遭免职

“耿同学”永久限流后,南开大学、中山大学趁周末接连通报:多人遭免职

药识局
2026-05-30 21:11:23
54岁突然发现,许多中产家庭渐渐穷回去了,以下两个征兆,要警惕

54岁突然发现,许多中产家庭渐渐穷回去了,以下两个征兆,要警惕

趣味萌宠的日常
2026-05-31 11:25:53
2026-05-31 21:44:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1257文章数 69关注度
往期回顾 全部

科技要闻

戴尔诺基亚又回来了!AI重估老牌科技公司

头条要闻

保时捷一天两次被钉子扎 路面现多个修车广告报价上千

头条要闻

保时捷一天两次被钉子扎 路面现多个修车广告报价上千

体育要闻

阿森纳用最悲壮的方式,成就了巴黎王朝

娱乐要闻

朱军退休,正义虽迟但到,女方受惩

财经要闻

医学首席转岗搞科技,A股科技股遭遇巨震

汽车要闻

900V+3.2秒破百 领克10+&领克10上市16.99万元起

态度原创

家居
教育
亲子
时尚
数码

家居要闻

云栖 舒展如流云

教育要闻

事关所有高考生!2026高考或将出现3个重大变化!家长考生了解

亲子要闻

青少年哪个品牌DHA好?藻油组合易吸收,纯净配方无负担,学习状态更稳定

梓渝:慢下来,也很好

数码要闻

26年Windows全通关!单核ThinkPad T43封神:裸机跑遍NT到Win10

无障碍浏览 进入关怀版