首页 > 代码库 > 最长公共子序列

最长公共子序列

细节
解决方案
叉子(6)
话语(30)
  • 加入收藏
  • |
  • 分享这个卡塔
 

编写一个称为LCS函数的函数可以接受两个序列,并返回传递给序列的最长子序列。

子序列与子字符串不同。子序列的术语不需要是原始序列的连续项。

示例子序列

“abc”=“a”,“b”,“c”,“ab”,“ac”,“bc”

LCS示例

LCS( "abcdef" , "abc" ) => returns "abc"
LCS( "abcdef" , "acf" ) => returns "acf"
LCS( "132535365" , "123456789" ) => returns "12356"

笔记

  • 两个参数都是字符串
  • 返回值必须是字符串
  • 如果没有共同的子序列,返回一个空字符串
  • 两个参数都将有一个或多个字符(在JavaScript中)
  • 所有测试只能有一个最长的共同子序列。不要担心这样的情况LCS( "1234", "3412" ),这将有两个可能最长的共同子序列:"12""34"

请注意,Haskell变体将使用随机测试,但任何最长的共同子序列将是有效的。

请注意,OCaml变体使用通用列表而不是字符串,并且还将具有随机测试(任何最长的公共子序列将是有效的)。

自己并没有完成:答案如下

function LCS(x, y) { yChar=y.split(""); var start=0; var arr=[]; for(var i=0;i<yChar.length;i++){ pos=x.indexOf(yChar[i],start); if(pos>=start){ arr.push(yChar[i]); start=pos+1; } } return arr.join(""); }

最长公共子序列