关于c#:如何找到最长的连续子序列,其反向也是子序列 | 珊瑚贝

How to find the longest continuous subsequence whose reverse is also a subsequence


假设我有一个序列x1,x2,x3…..xn,我想找到最长的连续子序列xi,xi 1,xi 2……xi k,它的逆也是a给定序列的子序列。
如果有多个这样的子序列,那么我还必须找到最小的 i.

ex:- 考虑序列:

abcdefgedcg
这里 i=3 和 k=2

aabcdddd
这里 i=5, k=3

我尝试查看原始最长公共子序列问题,但它用于比较两个序列以找到最长公共子序列….但这里只有一个序列,我们必须从中找到子序列。请让我知道解决此问题的最佳方法是什么,以找到最佳解决方案。

  • 对于第一个示例,我得到 i=2 k=3,对于第二个示例,我得到 i=5 k=4。
  • @Potatoswatter:不,你没有。再次阅读问题的陈述。 “k” 的定义搞砸了。 k 是子串的长度减一,i 是从一开始的索引。您假设 k 是子字符串的长度,而 i 是与开头的距离,但这不是它们的定义方式。
  • @Eric:那好吧。虽然这行得通,因为他保证为任何非空输入找到一个子字符串,但仍然建议 OP 他使用正常的编程约定。
  • 嘟嘟? stackoverflow.com/questions/2463364/…


实际上这是应用于序列的最长公共子串问题及其逆:http://en.wikipedia.org/wiki/Longest_common_substring_problem

这与最长公共子序列不同:http://en.wikipedia.org/wiki/Subsequence#Substring_vs._subsequence

  • @Potatoswatter:最长的公共子串问题比较两个字符串以找到公共子串……我们如何将相同的原理应用于单个序列及其反向?请解释。
  • @iecut:将序列视为字符串,将其反向视为另一个字符串。将算法应用于这两个字符串。您可以向后迭代序列以获得第二个字符串。
  • @Potatoswatter 它不是最长的公共子串,因为他要求 subsequence ,所以我们可以应用 LCS(只是改变比较)它变成 MCS(最小公共子序列),根据关于字符串和反转字符串的问题


将最长公共子字符串应用于字符串及其反向。

1
 LCS (“abcdefgedcg”,“gcdegfedcba”) =“cde”

编辑:不是土豆瓦特指出的子序列,不是子序列。


来源:https://www.codenong.com/2475040/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9361.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?