我正在做一个leetcode练习
https://leetcode.com/problems/remove-duplicate-letters/
问题是:
# Given a string which contains only lowercase letters, remove duplicate
# letters so that every letter appear once and only once. You must make
# sure your result is the smallest in lexicographical order among all possible results.
#
# Example:
# Given "bcabc"
# Return "abc"
#
# Given "cbacdcbc"
# Return "acdb"
我不太确定what is the smallest in lexicographical order
以及为什么给予" cbacdcbc"那么答案就是" acdb"
提前感谢您的回答:)
答案 0 :(得分:10)
最小的词典顺序是一个顺序关系,其中字符串 s 小于 t ,给定 s的第一个字符( s 1 )小于 t 的第一个字符( t 1 ),或者他们是等同的,第二个角色等等。
因此aaabbb
小于aaac
,因为虽然前三个字符相同,但第四个字符b
小于第四个字符c
。
对于cbacdcbc
,有几个选项,因为b
和c
是重复的,您可以决定删除哪些重复项。这导致:
cbacdcbc = adbccbacdcbc= adcbcbacdcbc = badccbacdcbc= badc ...
自adbc
< adcb
,你不能简单地回答你脑海中浮现的第一个答案。
答案 1 :(得分:3)
您无法对字符重新排序。您只能选择在重复字符的情况下要删除的事件。
bcabc
我们可以删除第一个b
或第二个b
,我们可以删除第一个c
或第二个c
。所有四个输出:
..abc
.cab.
b.a.c
bca..
按字典顺序(按字母顺序)对这四个输出进行排序:
abc
bac
bca
cab
拿第一个:
abc
答案 2 :(得分:1)
简而言之,您希望以最佳的词典顺序从低到高,但要确保在迭代输入字符串时获取所有字母。
答案 3 :(得分:1)
字符串比较通常可以通过两种方式完成:
aacccccc
少于 1>},因为已满足第二个位置ab
(和{{ 1}}< b
)。如果知道字符串的长度,则第二个可能更快。
您的问题包含小错误:
为什么给予" bcabc"那么答案就是" acdb"
虽然起源是:" 鉴于" bcabc"返回" abc" "。有意义的是,应该返回a
而不是b
答案 4 :(得分:0)
the smallest in lexicographical order
- 你的答案应该是初始字符串的子序列,包含每个字符的一个实例。
如果有许多这样的子序列可能(第一个例子为bca, bac, cab, abc
),则返回最小的子序列,将它们作为字符串进行比较(考虑词汇表中的字符串顺序)。
why Given "bcabc" then the answer would be "acdb"
你混淆了两个不同的例子
答案 5 :(得分:0)
似乎有一些误解;该示例指出,对于输入bcabc
,预期输出应为abc
,而不是acdb
,它指的是输入cbacdcbc
。