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;
}

PythonだとTLE,PyPyだとMLEしたので,C++で提出しました.