在一维数组S中,可能存在属于该组的任何数量的元素
U:{A,B,C,D,E}
Run Code Online (Sandbox Code Playgroud)
并且允许重复.
示例:
S = {E,B,D,C,A,D,A,E,E,D,B,B,A,C}
Run Code Online (Sandbox Code Playgroud)
问题是:
什么是最有效的方法,我可以确定包含属于集合U的所有元素的最短范围/路径,在任何给定的数组S?请记住,数组无法排序.
在上面的例子中,最短路径是连接数组S的前5个元素.
编辑:
1)集合U的元素数不是常数.
提前致谢.
有趣的作业,但你仍然需要自己编码。
好消息是您没有告诉我们您使用哪种语言,所以我将其视为您决定自己编写代码的标志,这很好。
到目前为止我最好的尝试:
有 2 个用于子字符串(范围)的指针,一个用于范围的开始(较小的索引),一个用于结束(较大的索引)。两者都首先指向数组的开头。
列出该范围内分别有多少个ABCDE。
从左到右迭代end 。
对于每个字符,增加列表中该字符的编号。如果结果(增加多少)> 1(,查看start是否指向同一个字符。如果是,则将start向前移动并减1,并且)当start指向相关数字> 1的字符时,将start向前移动和负 1。
如果列表中的 ABCDE 全部 >= 1,那么我们就找到了一个候选范围。将其与最短长度(如果有)进行比较,如果更小,则更新最短长度并记录新的最短范围开始的索引。