最长公共子序列
思路:
首先子序列是非连续性的,因此两个字符串的最长公共子序列必然是以两个字符串最先相同的字符开始计算,然后以后面的剩余子串为子问题,因此以此为基础进行递归。
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 }