问题:给定的两串字符,要求变成求出最长公共子序列;
程序:
import java.util.Scanner;
public class LCS {
/**
* @param args
*/
public static void main(String[] args) { //可以实现用户自己输入两串字符:
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一串字符:");
String s1 = scanner.next();
System.out.println("请输入一串字符:");
String s2 = scanner.next();
int c[][] = new int [s1.length() + 1][s2.length() + 1];
int b[][] = new int [s1.length() + 1][s2.length() + 1];
sort(s1,s2,c,b);
}
public static void sort(String s1,String s2,int c[][],int b[][]) { //该方法实现统计
int n = s1.length();
int m = s2.length();
char array1[] = s1.toCharArray();
char array2[] = s2.toCharArray();
for(int i = 1; i <= n; i++) {
c[i][0] = 0;
}
for(int j = 1; j <= m; j++) {
c[0][j] = 0;
}
for(int i = 1; i <= n; i++) {
for(int j = 1 ; j <= m; j++ ) {
if(array1[i-1] == array2[j-1]) {
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else if(c[i-1][j] >= c[i][j-1]) {
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else {
c[i][j] = c[i][j-1];
b[i][j] =3;
}
}
}
System.out.println("最长子序列为:");
print_sort(n, m, array1, b);
}
public static void print_sort(int n,int m,char ch [],int b[][]) { //该方法根据统计函数所得结果实现
//输出
if(n == 0 || m ==0) return;
if(b[n][m] == 1) {
print_sort(n-1, m-1, ch, b);
System.out.print(ch[n-1]);
}
else if(b[n][m] == 2) {
print_sort(n-1, m, ch, b);
}
else
print_sort(n, m -1, ch, b);
}
}