文字列Zは、ZがXとYの部分文字列を順に連結した場合、2つの他の文字列XとYのマージです。たとえば、 "strMERINGGE"は "string"と "MERGE"のマージです。 3つの文字列を受け取り、3つ目が最初の2つのマージであるかどうかをテストする動的プログラミングアルゴリズムを提供します。文字列と動的プログラミングアルゴリズム
この問題は、最も長い共通サブシーケンス問題のバリエーションのように見えますが、私はこのアルゴリズムを試しましたが、私はそれについてはわかりません。
public static String concat(String s1, String s2) {
if (string.IsNullOrEmpty(s1))
return s2;
if (string.IsNullOrEmpty(s2))
return s1;
int len1 = s1.Length - 1;
char last1 = s1[len1];
char first2 = s2[0];
if (s1[len1 - indexOfLast2] == first2)
{
int inLast2 = s2.LastIn(last1, Math.Min(len1, s2.Length - 1));
while (inLast2 != -1)
{
int x = inLast2;
while ((x != -1) && (s1[len1 - inLast2 + x] == s2[x]))
x--;
if (x == -1)
return s1 + s2.Substring(Last2 + 1);
}
inLast2 = s2.LastIn(last1, inLast2 - 1);
}
if (s1 + s2.Substring(Last2 + 1) == 2)
return inLast2 +1;
ほとんど同じバージョンが昨日私のアルゴリズム試験の最後の問題でした。あなたはほぼ正しい軌道に乗っていますが、動的プログラミングは配列を使った何らかの再帰呼び出しを意味します。また、このアルゴリズムはStringよりもブール型の戻り値になります。 – Jason