algorithm - 对字符串进行就地排序以查明是否存在非唯一字符

标签 algorithm sorting language-agnostic in-place

最近我遇到了一个问题,要求在没有任何额外缓冲区的情况下找出字符串中的非唯一字符。我将此问题解释为对字符串中的字符进行就地排序,然后遍历它以追踪非唯一字符。

另一种可以具有 O(1) 空间和 O(n^2) 运行时间的解决方案是使用两个“for”循环遍历字符串以追踪任何常见字符对。

我需要的是在至少 O(nlogn) 时间内用 O(1) 空间对字符串进行排序。

有没有一种简单/优雅的方法可以在 O(nlgn) 中使用 O(1) 空间对字符进行就地排序?

最佳答案

如何,而不是排序,只是扫描字符串来查找出现不止一次的字符?您可以使用 256 位来跟踪哪些字符出现一次,并使用额外的 256 位来跟踪至少出现两次的字符。总的额外内存使用量为512位,仅16个32位字,算法以线性时间运行,不修改原始字符串。

关于algorithm - 对字符串进行就地排序以查明是否存在非唯一字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4229673/

相关文章:

algorithm - T(n) = T(n/2) + clog(n) = O(log(n)^2) 的归纳证明

mysql - 按日期 ASC 排序,但组内按 DESC 排序

language-agnostic - 哪些不同的术语表示相同的事物(或不同的术语,但人们认为它们表示相同的意思)?

java - 用线程获取素数。如何划分区间?

algorithm - 应用动态规划技术的子问题的独立性

数组:找到最小交换次数以使数组的双调性最小?

java.lang.ClassCastException : java. 排序时 lang.Short 无法转换为 java.lang.Integer

python:按子列表中的项目对列表列表进行排序

algorithm - 二维圆最近邻的最佳动态数据结构

language-agnostic - 将成就添加到企业级软件的技术