【问题标题】:How to get the smallest in lexicographical order?如何按字典顺序获得最小的?
【发布时间】:2015-12-30 14:50:21
【问题描述】:

我在做一个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”

提前感谢您的回答:)

【问题讨论】:

标签: algorithm


【解决方案1】:

最小的字典顺序是字符串s小于t的顺序关系,给定s的第一个字符( s1) 小于 t (t1) 的第一个字符,或者在如果它们是等价的,第二个字符等。

所以aaabbb 小于aaac,因为虽然前三个字符相等,但第四个字符b 小于第四个字符c

对于cbacdcbc,有几个选项,因为bc 是重复的,您可以决定删除哪些重复。这导致:

cbacdcbc = adbc cbacdcbc = adcb cbacdcbc = badc cbacdcbc = badc ...

因为adbc adcb,所以你不能简单地用你脑海中浮现的第一个答案来回答。

【讨论】:

  • 等一下,不是adcb > adbc吗?
  • 我不明白。
  • @Geekuh。您对问题的回答写在最后一行:)
【解决方案2】:

您不能重新排序字符。如果出现重复字符,您只能选择要删除的匹配项。

bcabc

我们可以删除第一个b 或第二个b,我们可以删除第一个c 或第二个c。总共有四个输出:

..abc
.cab.
b.a.c
bca..

按字典顺序(按字母顺序)对这四个输出进行排序:

abc
bac
bca
cab

拿第一个:

abc

【讨论】:

    【解决方案3】:

    显然,想要的输出必须只包含一次字母。 现在,据我了解,当最左边的字母出现在之前(abc?ascii?)时,您必须以一种能给您最佳顺序的方式选择字母 现在你会问为什么“acdb”而不是“abcd”。我认为你不要拿第一个“cb”,因为你后来多了c和b,但你必须拿“a”,因为现在只有一个来了。那么你必须取c,因为在下一个b之后没有更多的“d”。这就是为什么你先拿 c,然后再拿 d,因为后面没有 d。

    简而言之,您希望按照从低到高的最佳字典顺序来获取它,但请确保在遍历输入字符串时获取所有字母。

    【讨论】:

      【解决方案4】:

      字符串比较通常有两种方式:

      • 比较第一个不匹配的字母(称为字典式),例如aacccccc 小于 小于ab,因为在第二个位置b 已经满足(并且a b) .
      • 首先比较字符串长度,较短的字符串被视为较少。如果字符串长度相等,则应用字典序。

      如果字符串的长度已知,第二个可能会更快。

      您的问题包含小错误:

      为什么给定“bcabc”,那么答案将是“acdb”

      虽然起源是:“给定“bcabc”返回“abc””。这是有道理的,应该返回 abc 而不是 bca

      【讨论】:

        【解决方案5】:

        似乎有些误会;该示例说明对于输入bcabc,预期输出应为abc,而不是acdb,后者指的是输入cbacdcbc

        【讨论】:

          【解决方案6】:

          the smallest in lexicographical order - 你的答案应该是初始字符串的子序列,包含每个字符的一个实例。
          如果可能有许多这样的子序列(第一个示例为bca, bac, cab, abc),则返回最小的子序列,将它们作为字符串进行比较(考虑词汇表中的字符串顺序)。

          why Given "bcabc" then the answer would be "acdb"
          你混淆了两个不同的例子

          【讨论】:

            猜你喜欢
            • 2013-02-06
            • 2019-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多