最长公共子序列

最长公共子序列

思路:

首先子序列是非连续性的,因此两个字符串的最长公共子序列必然是以两个字符串最先相同的字符开始计算,然后以后面的剩余子串为子问题,因此以此为基础进行递归。

 1 /**
 2  * @author: wooch
 3  * @create: 2020/02/12
 4  *
 5  * 最长公共子序列
 6  * 核心思路:
 7  * 首先子序列是非连续性的,因此两个字符串的 最长公共子序列 必然是以两个字符串最先相同的字符开始计算
 8  * 因此以此为基础进行递归
 9  */
10 public class LongestPublicSubSequence {
11     public static void main(String[] args) {
12         int a = longestPublicSubSequence("abcd","xacdb");
13         System.out.println(a);
14     }
15 
16     /**
17      * by recursive
18      * @param strX
19      * @param strY
20      * @return
21      */
22     public static int longestPublicSubSequence(String strX,String strY){
23         if(strX.length()==0||strY.length()==0){
24             return 0;
25         }
26         if(strX.charAt(0)==strY.charAt(0)){
27             return longestPublicSubSequence(strX.substring(1),strY.substring(1))+1;
28         }else{
29             return Math.max(longestPublicSubSequence(strX.substring(1),strY),
30                     longestPublicSubSequence(strX,strY.substring(1)));
31         }
32     }
33 }
View Code
原文地址:https://www.cnblogs.com/baishouzu/p/12299867.html