2020/12/20
的每日一题,是一道很有意思的贪心题,值得一做。
每日一题出的题目质量还是挺高的,每天还是要坚持做一做呀!
给你一个字符串
s
,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:
1
2
3 > 输入:s = "bcabc"
> 输出:"abc"
>
示例 2:
1
2
3 > 输入:s = "cbacdcbc"
> 输出:"acdb"
>
提示:
1 <= s.length <= 10^4
s
由小写英文字母组成
思路就是: 遍历字符串s,若当前字符c比答案的串ans
,最后一个字符要小,并且ans
串最后一个字符还会出现在下面的遍历中,那么就可以去除掉。
我们把示例1用上述思想用图的方式解释一遍,大概的过程就如下图:
看起来好像是对的,其实如果给的示例是:”abacb” 上述方法得到的答案是 “acb”,而正确答案是“abc”。
我们的想法究竟哪里不对呢?噢,原来是已经存在于答案串中的字符,再次遇到无需处理。
这样我们就得到完整的算法了:遍历字符串s,若当前字符已经存在于答案串ans
中则直接跳过。若当前字符c比答案的串ans
,最后一个字符要小,并且ans
串最后一个字符还会出现在下面的遍历中,那么就可以去除掉。
1 | class Solution { |