最相同子列問題(一)

1135 ワード

15を超えない2つの文字列を入力し、2つの文字列の最も長い同じサブ列を出力し、複数ある場合は、最初の文字列の中で相対的に前のサブ列を出力します.
テストサンプル:
a a a b abc cde abcdabcdef bcdefabcd abcdefgh atbcdtdefg abcdefgh bcde aaaaaaaaaa aaaaaaaaab
#include 
#include 
using namespace std;
int main()
{
	char s1[20], s2[20];
	while (cin >> s1 >> s2)
	{
		for (int length_substr = strlen(s1); length_substr > 0; length_substr--)//      
		{
			char c1[20];
			strncpy_s(c1, s1, strlen(s1));
			c1[length_substr] = '\0';
			for (char *p1 = s1; *(p1 + length_substr - 1) != '\0'; p1++)//      
			{
				char pp1[20];
				strncpy_s(pp1, p1, length_substr);
				*(pp1 + length_substr) = '\0';
				char c2[20];
				strncpy_s(c2, s2, strlen(s2));
				c2[strlen(c2)] = '\0';
				for (char *p2 = c2; *p2 != '\0'; p2++)//      
				{
					char pp2[20];
					strncpy_s(pp2, p2, length_substr);
					*(pp2 + length_substr) = '\0';
					if (strncmp(pp1, pp2, length_substr) == 0)
					{
						cout << pp1;
						goto E;
					}
				}
			}
		}
	E: cout << endl;
	}
	return 0;
}