js暴力递归求最长公共子序列

195 阅读1分钟

思路

从后往前算:
 递归基为:有一个序列为长度为0时
 两种情况:
   1.两个序列最后一个元素相同,截取并保存
   2.最后一个不相同:分为两个算法
       (1)抛弃第一个序列最后一个元素,第二个序列不变,继续递归
       (2)抛弃第二个序列最后一个元素,第一个序列不变,继续递归
       最后取这两者长的

代码

function getLCS(l1,l2) {
    if(l1.length==0||l2.length==0) return ''
    if(l1[l1.length-1]==l2[l2.length-1]) return getLCS(l1.slice(0,l1.length-1),l2.slice(0,l2.length-1)) + l1[l1.length-1]
    let result1 = getLCS(l1.slice(0,l1.length-1),l2)
    let result2 = getLCS(l1,l2.slice(0,l2.length-1))
    return result1.length >  result2.length ? result1 : result2
}
console.log(getLCS('afgbbnhhhhhkh','aghjbbcccck'))