import java.util.Scanner; /** * * 項目名稱:jobdu * 類名稱:Main * 類描述:1. 本題用於求解字符串的最大公共子序列問題。 * 2. 本題的解符合最優子結構,故採用動態規劃 * 3. * 建立人:黃傳聰 * 建立時間:2013-10-20 上午10:49:45 * 修改人: * 修改時間: * 修改備註: * @version */ public class Main { /** * 方法名稱:main() * 方法描述: * @param * @return String * @Exception */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ String str1 = scanner.next(); String str2 = scanner.next(); int a = str1.length(); int b = str2.length(); //採用備忘錄方法的動態規劃 //存儲最大子串的 長度 //(i,j)存放的是Xi與Yj的最大公共子串的長短 int[][] maxLength = new int[a+1][b+1]; int i , j; for(i=1;i<=b;i++){ maxLength[0][i] = 0; } for(i=1;i<=a;i++){ maxLength[i][0] = 0; } for(i=1;i<=a;i++){ for(j=1;j<=b;j++){ if(str1.charAt(i-1) == str2.charAt(j-1)){ maxLength[i][j] = maxLength[i-1][j-1] + 1; }else{ maxLength[i][j]= maxLength[i-1][j]>maxLength[i][j-1]?maxLength[i-1][j] : maxLength[i][j-1]; } } } System.out.println(maxLength[a][b]); } } }