PythonでJOI難易度5を埋める #29
B - 共通部分文字列
文字列sを前から1つずつ除いたものと文字列tを比べる,文字列tを前から1つずつ除いたものと文字列sを比べれば最大の共通部分が分かります.
#include <bits/stdc++.h> using namespace std; int main() { string s1, s2; cin >> s1 >> s2; int l1, l2, cnt, ans; l1 = s1.size(); l2 = s2.size(); cnt = 0; ans = 0; for (int i = 0; i < l1; i++) { cnt = 0; for (int j = 0; j < min(l1 - i, l2); j++) { if (s1[i + j] == s2[j]) { cnt += 1; } else { ans = max(ans, cnt); cnt = 0; } ans = max(ans, cnt); } } for (int i = 0; i < l2; i++) { cnt = 0; for (int j = 0; j < min(l2 - i, l1); j++) { if (s2[i + j] == s1[j]) { cnt += 1; } else { ans = max(ans, cnt); cnt = 0; } ans = max(ans, cnt); } } cout << ans <<endl; }