子串及其在字符串中的反转

时间:2010-03-17 15:08:19

标签: algorithm string

我的教授在动态编程课上讨论过这个问题并要求我们考虑一下。她也给了我们一些例子。给定一个字符串,我们找到最长的连续子序列,其反向也是给定字符串中存在的子序列。

示例:

INPUT: pqrstuvtsrv
OUTPUT: i=3, k=2

rst -> tsr (rst found first at i=3 and for 2 more positions)

INPUT: mpqrsrqp
OUTPUT: i=2, k=6
pqrsrqp in reverse

INPUT: mmpqssss
OUTPUT: i=5, k=3

我想把字符串及其反转放入2个不同的数组中并逐个字符地进行比较。但我确信这不是最好的方法。关于什么可能是最有效的任何建议?

4 个答案:

答案 0 :(得分:4)

这是Longest common substring problem的变体。您正在寻找输入的最长公共子串及其反向。

对于这个具体案例,可能有一个更简单的解决方案,但目前,我对此表示怀疑。 =)

答案 1 :(得分:1)

这不起作用,因为您还必须注意重叠。如果您使用LCS,您也会找到回文,它们可能会或可能不会在原始字符串中反转。

答案 2 :(得分:0)

听起来像suffix tree的作业(实际上,两个,或两者的广义后缀树)。但这是一个动态编程类,而不是数据结构类,也许不是。

如果您想要一个完整的剧透,请搜索“最长公共子字符串问题”。但我建议你不要过分关注任何看似解决方案的东西。动态编程问题提示的一个问题是,解决方案通常依赖于一个非常聪明的观察,你要么得到它,要么得不到。

答案 3 :(得分:0)

您正在寻找的是Longest palindromic substring,它已知道线性时间解决方案。希望我帮忙。