Algorithm 如何按字典顺序获取最小值?
我正在做一个leetcode练习 问题是:Algorithm 如何按字典顺序获取最小值?,algorithm,Algorithm,我正在做一个leetcode练习 问题是: # 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 res
# 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"
我不太清楚什么是字典顺序中最小的,为什么给出“cbacdcbc”,那么答案是“acdb”
提前感谢您的回答:)
按字典顺序排列的最小值
-您的答案应该是初始字符串的子序列,包含每个字符的一个实例。如果可能有许多这样的子序列(
bca、bac、cab、abc
,对于第一个示例),则返回最小的一个,将它们作为字符串进行比较(考虑词汇表中的字符串顺序)
为什么给出“bcabc”,那么答案将是“acdb”
你混淆了两个不同的例子,似乎有些误解;该示例说明,对于输入
bcabc
,预期的输出应该是abc
,而不是acdb
,它指的是输入cbacdcbc,最小的词典顺序是一种顺序关系,其中,给定s(s1)的第一个字符,字符串s小于t小于t(t1)的第一个字符,或者如果它们相等,则小于第二个字符,以此类推
因此aaabbb
小于aaac
,因为尽管前三个字符相等,但第四个字符b
小于第四个字符c
对于cbacdcbc
,有几个选项,因为b
和c
是重复的,所以您可以决定删除哪些重复项。这导致:
cbacdcbc = adbc
cbacdcbc = adcb
cbacdcbc = badc
cbacdcbc = badc
...
cbacdcbc=adbc
cbacdcbc=adcb
cbacdcbc=badc
cbacdcbc=badc
...
由于adbc
adcb,因此您不能简单地用脑海中浮现的第一个答案回答。显然,想要的输出必须只包含一次字母。
现在,据我所知,当最左边的字母出现在输入之前(abc?ascii?)时,您必须以最佳顺序选择字母
现在你会问为什么“acdb”比“abcd”大。我想你不会选第一个“cb”,因为你以后会选更多的c和b,但你必须选“a”,因为现在只有一个。那么你必须选c,因为在下一个b之后没有更多的“d”。这就是为什么你先选c,然后选d,因为以后不再选d了
简言之,您希望按照从低到高的最佳词典顺序来获取它,但请确保在迭代输入字符串时获取所有字母。字符串比较通常可以通过两种方式完成:
- 比较第一个不匹配的字母(称为词典),例如
小于aacccc
,因为在第二个位置ab
已经满足(和b
a
)b
- 首先比较字符串长度,较短的字符串被视为较小的字符串。如果字符串长度相等,则应用字典
而来源是:“给定”bcabc“返回”abc“。这意味着应该返回
abc
,而不是bca
您不能对字符重新排序。如果存在重复字符,则只能选择要删除的匹配项
bcabc
我们可以删除第一个b
或第二个b
,我们可以删除第一个c
或第二个c
。总共有四项产出:
..abc
.cab.
b.a.c
bca..
按字典顺序(字母顺序)对这四个输出进行排序:
以第一个为例:
abc
等待一秒钟可能会重复,不是吗?
adcb>adbc
?我不明白。@Geekuh。你对问题的回答写在最后一行:)
abc