各類演算法筆試題彙總
阿新 • • 發佈:2019-02-17
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); } } }