/**
* Dynamic Programming LCS generator
*
* @author Zach Souser
* @version Spring 2013
*/
public class DynamicLCS extends LongestCommonSubsequence
{
/**
* Generate the LCS dynamically
*
* @param a the first string
* @param b the second string
* @return the LCS
*/
public String lcs(String a, String b) {
String[][] memo = new String[a.length()+1][b.length()+1];
String retVal = "";
if (a.length() == 0 || b.length() == 0) return "";
for (int i = 0; i < memo.length; i++) {
memo[i][0] = "";
}
for (int i = 0; i < memo[0].length; i++) {
memo[0][i] = "";
}
for (int i = 1; i < memo.length; i++) {
for (int j = 1; j < memo[i].length; j++) {
if (a.charAt(i-1) == b.charAt(j-1)) {
memo[i][j] = memo[i-1][j-1]+a.charAt(i-1);
} else {
String up = memo[i-1][j];
String back = memo[i][j-1];
if (up.length() < back.length()) memo[i][j] = back;
else memo[i][j] = up;
}
}
}
return memo[memo.length-1][memo[0].length-1];
}
}