1. 程式人生 > >各類演算法筆試題彙總

各類演算法筆試題彙總

import java.util.Scanner;

public class Main {

	private static int[][] getLCS(String A, String B) {
		
		char[] ca = A.toCharArray();
		char[] cb = B.toCharArray();
		
		int la = A.length();
		int lb = B.length();
		
		int[][] F = new int[la+1][lb+1];
		
		for(int i=0; i<la+1; i++) 
			F[i][0] = 0;
		
		for(int j=0; j<lb+1; j++) 
			F[0][j] = 0;
		
		for(int m=1; m<la+1; m++) {
			for(int n=1; n<lb+1; n++) {
				if(ca[m-1] == cb[n-1]) 
					F[m][n] = F[m-1][n-1] + 1;
				else {
					int t1 = F[m-1][n];
					int t2 = F[m][n-1];
					if(t1 > t2) 
						F[m][n] = t1;
					else 
						F[m][n] = t2;
				}
			}
		}
		return F;
	}
	
	private static void printLCS(int[][] F, String A, String B) {
		char[] ca = A.toCharArray();
		char[] cb = B.toCharArray();
		
		int tm = A.length();
		int tn = B.length();
		
		StringBuffer sb = new StringBuffer();
		
		while(tm > 0 && tn > 0) {
			if(ca[tm-1] == cb[tn-1]) {
				sb.insert(0, ca[tm-1]);
				tm--;
				tn--;
			}
			else if (F[tm-1][tn] > F[tm][tn-1]) 
				tm--;
			else 
				tn--;
		}
		System.out.println(F[A.length()][B.length()]);
		System.out.println(sb.toString());
	}
	
	private static int toPalindromeString(String data) {
		StringBuffer sb = new StringBuffer(data);
		String reverse_data = sb.reverse().toString();
		int[][] F = getLCS(data,reverse_data);
		int original_length = data.length();
		return original_length - F[original_length][original_length];
	}
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		while( sc.hasNext()) {
			String data = sc.nextLine();
			int number = toPalindromeString(data);
			System.out.println(number);
		}
	}
}