【发布时间】:2018-07-16 18:51:52
【问题描述】:
我最近在编码挑战中遇到了一个问题,我必须合并 n 个字母数字字符串,然后对新合并的字符串进行排序,同时只允许排序后的字符串中包含字母字符。现在,这将是相当直接的,除了添加的警告是算法必须是 O(n) (它没有指定这是时间复杂度还是空间复杂度或两者兼而有之)。
我最初的方法是将字符串连接成一个新字符串,只添加字母字符,然后在最后进行排序。我想提出一个更有效的解决方案,但我得到的时间比最初被告知的要少。没有任何排序算法(我知道)在 O(n) 时间内运行,所以我唯一能想到的是我可以增加空间复杂度并使用排序的哈希表(例如 C++ 映射)来存储每个字符的计数,然后按排序顺序打印哈希表。但由于这可能需要打印 n 个字符 n 次,我认为它仍然会以二次时间运行。另外,我使用的是 python,我认为它没有办法保持字典排序(也许可以)。
这个问题是否可以在 O(n) 时间和/或空间复杂度内解决?
【问题讨论】:
-
计数排序是 O(n) 时间。它可能会起作用(尽管如果您考虑使用字母数字来包含所有 Unicode 字母数字的东西,那就更难了)。
-
[幽默] 考虑一下 Ramesh 教授 Existencial Sort 这是 O(1)
标签: python c++ string algorithm sorting