2 つの文字列の最大の共通サフィックスを見つけるための再帰的な解決策を見つけました。これを動的プログラミング ソリューションに変換するにはどうすればよいですか。サフィックスは 2 つの文字列の末尾から比較するのが最も簡単なので、ボトムアップ ソリューションを概念化するのは難しいです。私は解決策を試みましたが、それは私にはトップダウンのようです。
試み
var LCSuffDyn = function(X,Y) {
longest_suffix = [''];
var largest_string, smallest_string;
if (X.length > Y.length) {
largest_string = X;
smallest_string = Y;
} else {
largest_string = Y;
smallest_string = X;
}
for (var k=1; k<smallest_string.length; k++) {
if (X[X.length-k] === Y[Y.length-k]) {
longest_suffix[k] = X[X.length-k]+longest_suffix[k-1];
}
else break;
}
return longest_suffix[longest_suffix.length-1];
};
console.log(LCSuffDyn('cbbbbbbbbbbajlbbbbbbbaba', 'cajkbbbbbbbbbjklbaba'));
再帰的
var LCSuffRec = function(X,Y) {
return rec(X,Y, X.length, Y.length);
function rec(X, Y, m, n) {
if (X[m-1] === Y[n-1]) return rec(X, Y, m-1, n-1) + X[m-1];
else return '';
}
};