以最快的方式重新排序字母以按字典顺序排在第一位

Posted

技术标签:

【中文标题】以最快的方式重新排序字母以按字典顺序排在第一位【英文标题】:Reordering the alphabet to come in first in lexicographical order in fastest way 【发布时间】:2019-11-22 20:51:49 【问题描述】:

假设我们有一个人名列表,其中没有两个是相同的。列表的最大大小为:

现在的目标是找出如果我们改变英文字母顺序,有多少名字(以及哪些名字!)可以在字典顺序中排在第一位! 例如,如果列表是:

ha haa st

然后通过更改字母表,我们可以将 hast 放在首位,但无论我们如何更改它 haa 总是会排在后面哈哈,所以两个名字可以在前。

当然有一种蛮力的方法可以找出答案,但需要检查所有 26 个!每个单词可能的字母顺序!由于这个问题的时间限制是 1 秒,所以我认为 O(nlogn) 或更低的算法会找到。但是我不知道如何解决这个问题。我认为使用 trie 会有所帮助(因为我在学习数据结构时遇到了这个问题!)但可能图算法也可以提供帮助。

我怎样才能找到解决这个问题的正确算法和方法以及如何在代码中实现它?

【问题讨论】:

我们对家庭作业问题的期望也适用于此类挑战问题。简单地把问题陈述丢给我们,没有任何努力,并寻求解决方案,这对于 Stack Overflow 来说是无关紧要的。 @Prune 好吧,我不知道该怎么办。我很确定我应该使用 trie 来完成这项工作,但我在互联网上找不到任何帮助。当一个人不知道该怎么做并且没有人帮忙时该怎么办? 通常我们的经验是,教育工作者不会设置学生没有希望解决的问题。因此,您的一堂课或您的一套课文很可能会给出答案,并且您已经学习了相关材料。您可能会在 cmets 中得到提示,但您可能会发现参加复习会议或咨询您的课程主管会更有用。 trie 可以让你消除上面的haa,但不会让你从aha hah ahh 中消除ahh @FarzinNasiri 做什么?也许发布到一个开放式帮助站点,而不是 ***。不过,首先,我会联系您班级的人力资源(讲师、导师等),以寻求在问题分析和适当解决技术方面的更广泛帮助。 “我不知道如何解决”不是 Stack Overflow 问题。 【参考方案1】:

w 成为第一个词

    如果我们更改字母,第一个单词会保持其长度。任何可以排在第一位的名称必须长度为 ...length(w)。

    L 成为上面的候选词。根据初始公式,所有名称都不同,因此L 也由唯一名称组成。

L 中的唯一名称是解决方案。 L 中的任何名称都是解决方案。您的问题的答案是L 的大小。


tldr:统计长度length(w)的所有单词

【讨论】:

以上是关于以最快的方式重新排序字母以按字典顺序排在第一位的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 PostgreSQL 查询中排序 DESC 时 NULL 值排在第一位?

什么是字典排序

如何将 axlsx 文件分组以按 org 字母顺序排序

如何比较包含非英文字符的 unicode 字符串以按字母顺序排序?

在 C++ 中使用链表按字母顺序对字符串进行排序

sdustoj 规范序排列