九度論壇-1042

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]);
			
		}
		
	}

}
相關文章
相關標籤/搜索