Java 使用哈希查找总长度最小的字符串子数组,该子数组包含原始数组中的所有不同字符串
您好,这是一个关于散列的java练习。首先,我们有一个由N个字符串(1)组成的数组Java 使用哈希查找总长度最小的字符串子数组,该子数组包含原始数组中的所有不同字符串,java,arrays,string,algorithm,hash,Java,Arrays,String,Algorithm,Hash,您好,这是一个关于散列的java练习。首先,我们有一个由N个字符串(1)组成的数组 遍历数组一次,使用散列来跟踪您以前是否看到过一个单词。仅当您第一次看到一个单词时,通过将计数相加来计算数组中的不同单词 第二次遍历数组,使用散列记录每个单词的显示次数。同时记录所显示的所有单词的长度总和。继续,直到至少看到一次所有单词为止 现在,在不将单词计数减少到零的情况下,尽可能向前移动范围的开头。请记住相应地调整哈希和字母计数。这将为您提供第一个范围,其中每个单词至少包含一次,如果不排除一个单词,则不能减少
这是以线性时间运行的。欢迎使用Stackoverflow!对于一些算法爱好者来说,这可能是一个有趣的问题,但我认为目前形式的问题有点难以理解,他们可能会错过这个机会。当你说“连续子数组可以是…”时,你是否错过了{apple,orange,orange,pear}?您还可以明确定义最小长度(每个数组元素的长度之和)的含义。@FooF从答案19来看,最小长度似乎是序列中的字符总数。您的问题可以理解为“原始数组中有多少不同的字符串?”因为不需要AFAIC,所述子阵列必须实际出现在原始阵列中,只要存在这样的子阵列。@尝试操作需要最小的字母数。而且我认为算法描述比代码更有用。@DaveGalvin非常感谢!我终于通过了所有测试用例。但我意识到对于第3步和第4步,我不仅要从左到右检查,还需要从右到左检查(反转数组并再次检查)才能得到答案。@user2982578您能举一个例子,说明需要反转才能抓住一个案例吗?