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

Algorithm 子字符串及其在字符串中的反转,algorithm,string,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: mm

我的教授在一节动态规划课上谈到了这一点,并要求我们仔细考虑。她也给了我们一些例子。给定一个字符串,我们要找到最长的连续子序列,其逆序列也是给定字符串中存在的子序列

例如:

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

我想把字符串及其反面放入两个不同的数组中,并逐个字符进行比较。但我相信这不是最好的方法。关于什么可能是最有效的,您有什么建议吗?

这是一个基于。您正在查找输入的最长公共子字符串及其反向


对于这个特定的案例,可能有一个更简单的解决方案,但目前我对此表示怀疑

这是一个基于。您正在查找输入的最长公共子字符串及其反向

对于这个特定的案例,可能有一个更简单的解决方案,但目前我对此表示怀疑

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

如果你想要一个完整的扰流板,搜索“最长公共子串问题”。但我建议你不要过于仔细地看任何似乎是解决方案的东西。动态规划问题提示的一个问题是,解决方案通常依赖于一个非常聪明的观察结果,你要么得到它,要么得不到它。

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


如果你想要一个完整的扰流板,搜索“最长公共子串问题”。但我建议你不要过于仔细地看任何似乎是解决方案的东西。动态规划问题提示的一个问题是,解决方案通常依赖于一个非常巧妙的观察,你要么得到它,要么得不到它。

这不起作用,因为你还必须注意重叠。如果您使用LCS,您也会发现回文,它们在原始字符串中可能有也可能没有反向。

这不起作用,因为您还必须注意重叠。如果您使用LCS,您也会发现回文,它们在原始字符串中可能有也可能没有倒数。

您要查找的是命名的回文,并且它具有已知的线性时间解。希望我能帮上忙。

你要找的是命名的,它有已知的线性时间解。希望我能帮上忙。

但它必须是一个连续的子字符串,其反面也出现在给定的字符串中。我该如何修改它?@christa:最长公共子串算法寻找两个任意字符串的最长公共(连续)子串,比如s1和s2。如果让s2与s1相反,就得到了你的解,但它必须是一个连续的子串,它的倒数也出现在给定的字符串中。我该如何修改它?@christa:最长公共子串算法寻找两个任意字符串的最长公共(连续)子串,比如s1和s2。如果让s2与s1相反,就得到了你的解。