【发布时间】:2013-12-03 07:22:47
【问题描述】:
给定两个字符串:
str1 = "abcdefacbccbagfacbacer"
str2 = "abc"
我必须在str1 中找到由str2 的字符子集形成的最长子字符串,在本例中为-7 (acbccba)。以最小的复杂性解决这个问题的方法是什么。首先我想到了DP。但是,我猜这真的不需要 DP,因为我们必须搜索子字符串,而不是子序列。然后我想到了后缀树。但这需要额外的预处理时间。
最好的方法是什么?事实上,这个问题甚至适用于后缀树或 DP 吗?
【问题讨论】:
-
您的意思是包含来自
str2的(某些子集)字符的任何排列的子字符串吗? -
@ElliottFrisch 是的,
str2的任何字符。 -
@Elliott Frisch - 尽管是的,但这对我来说似乎是不。示例最长的结果是“acbccba”,这显然不是来自“abc”的字符子集的排列 - 它重复了所有这些字符。在我看来,“abc”只是一组可以出现的字符。
-
@Steve314 实际上它不必包含来自
abc的所有字符。例如,如果有一个子字符串 -ababababab,那么这就是一个答案。很抱歉这个误导性的例子。 -
@user3011937 - 理解 - “可以发生”并不意味着“必须发生”。我认为您误解的是排列是(可能)以不同顺序(不重复)中的相同项目。 “acbccba”不是“abc”的排列,因为您不能简单地通过重新排序“abc”中的项目来获得“acbccba”。 “cba”是“abc”的排列,“aabbccc”是“acbccba”的排列。
标签: java string algorithm optimization complexity-theory