Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对字符串进行就地排序,以确定是否存在非唯一字符_Algorithm_Sorting_Language Agnostic_In Place - Fatal编程技术网

Algorithm 对字符串进行就地排序,以确定是否存在非唯一字符

Algorithm 对字符串进行就地排序,以确定是否存在非唯一字符,algorithm,sorting,language-agnostic,in-place,Algorithm,Sorting,Language Agnostic,In Place,最近我遇到了一个问题,要求在没有任何额外缓冲区的情况下找出字符串中的非唯一字符。我将这个问题解释为字符串中的一种就地字符,然后遍历它以跟踪非唯一字符 另一个可以有O(1)空间和O(n^2)运行时的解决方案是在字符串上有两个“for”循环,以跟踪任何常见的字符对 我需要的是用O(1)空间在至少O(nlogn)时间内对字符串进行排序 有没有一种简单/优雅的方法可以用O(1)空间对O(nlgn)中的字符进行就地排序?维基百科上有一个非常好的排序算法比较网格 Heapsort和Smoothsort似乎

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

另一个可以有O(1)空间和O(n^2)运行时的解决方案是在字符串上有两个“for”循环,以跟踪任何常见的字符对

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


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

维基百科上有一个非常好的排序算法比较网格

HeapsortSmoothsort似乎是您显而易见的赢家。取决于你的语言,你可能已经有了这些,也可能还没有,尽管我相信在大多数情况下,它们可能离图书馆很远

有一个Java impl,一眼就能看出它是一组类似的东西。

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

Heapsort听起来很有希望。谢谢“没有任何附加缓冲区。”512位不是缓冲区,它不取决于正在处理的字符串的长度。它是O(1)辅助存储器。关键是,您不必对字符串中的字符进行排序就可以完成OP所要求的任务。对于长度超过几个字符的字符串,此方法可能比任何其他方法都要快得多,包括接受答案中的方法。