假设我们有一大堆无法适应内存的字符,我们希望找到最长的字符范围,以便不重复这些字符。你会怎么做?我熟悉外部排序的概念,但没有看到我们如何将类似的技术应用于这样的问题,因为它似乎处理一系列字符完全依赖于先前的序列。
答案 0 :(得分:0)
在位置0,前指针和后指针的文件中启动两个指针。
然后将前指针前进到文件中,然后根据需要前进指针,以确保后指针和前指针之间的跨度不包含重复字符。这将是以前指针结束的唯一字符的最长跨度。
为了做到这一点,你只需要维护一个包含后指针和前指针之间所有字符的集合。如果你想要前进指针,并且你传递的字符已经在集合中,那么你必须先推进后退指针,直到删除重复的字符。
以这种方式遇到的最长字符跨度将是文件中唯一字符的最长跨度。
您可以通过打开同一个文件两次来实现这两个文件指针。或者,您只需打开一次,然后使用循环缓冲区记住背面和正面之间的所有内容。只有256个(取决于你的字符类型)唯一字符,所以这个缓冲区不必太大。