【发布时间】:2011-09-27 15:43:24
【问题描述】:
如何找到两个字符串的所有交集(也称为最长公共子串)及其在两个字符串中的位置?
例如,如果 S1="never" 和 S2="forever" 则结果交集必须是 ["ever"] 并且它的位置是 [(1,3)]。如果S1="address" 和S2="oddness" 则结果交叉点为["dd","ess"],它们的位置为[(1,1),(4,4)]。
最好不包含任何库的最短解决方案。但也欢迎任何正确的解决方案。
【问题讨论】:
-
子字符串是否必须出现在两个字符串中的相同位置(就像在您的两个示例中一样)?
-
@aix:不,它们可以出现在不同的位置,例如“从不”和“永远”。我已经改变了例子。
-
如果
"call"和"wall"的正确解决方案是["all"]而不是["a", "al", "all", "ll", "l", "l"],那么“所有解决方案”是什么意思?你的意思是所有的最大解决方案吗?这里的准确定义是什么? -
你关心时间复杂度,还是不太关心?
-
@psihodelia:然后发布您的代码作为起点。