here is the code........
NOTE:- Here the program is printing the length of the longest common
subsequence and also the evaluated sequence.
public class LCS {
public static void main(String[] args) throws Exception {
Object[] arr = new Object[2];
arr = evaluateLCS("suman", "paras");
int t = arr[1].toString().length() - 1;
System.out.println("length of longest common subsequence is " + Integer.parseInt(arr[0].toString()));
System.out.println("the required longest subsequence is " + recursion_string(arr[1].toString(), t));
}
public static Object[] evaluateLCS(String first, String second) {
Object[] arr = new Object[2];
StringBuffer sequence = new StringBuffer();
int length = 0;
if (first.length() == 0 || second.length() == 0) {
arr[0] = new Integer(0);
arr[1] = "";
return arr;
} else {
if (first.charAt(first.length() - 1) == second.charAt(second
.length() - 1)) {
arr = evaluateLCS(first.substring(0, first.length() - 1),
second.substring(0, second.length() - 1));
arr[0] = new Integer(1 + Integer.parseInt(arr[0].toString()));
arr[1] = (Object) sequence.append(
first.charAt(first.length() - 1)).append(arr[1]);
return arr;
} else {
Object[] arr1 = new Object[2];
arr = evaluateLCS(first.substring(0, first.length() - 1),
second);
arr1 = evaluateLCS(first,
second.substring(0, second.length() - 1));
if (Integer.parseInt(arr[0].toString()) >= Integer
.parseInt(arr1[0].toString()))
return arr;
else
return arr1;
}
}
}
public static int max(Object[] arr1, Object[] arr2) {
int max1 = Integer.parseInt(arr1[0].toString());
int max2 = Integer.parseInt(arr2[0].toString());
if (max1 >= max2)
return max1;
else
return max2;
}
public static String recursion_string(String name, int t) throws Exception {
if (name.length() == 0) {
return "";
}
if (name.length() == 1) {
return name;
}
String start = name.substring(t);
String remainder = name.substring(0, t);
t--;
return (start + recursion_string(remainder, t));
}
}