Untitled

 avatar
unknown
c_cpp
a month ago
522 B
8
Indexable
#include<bits/stdc++.h>
using namespace std;

int n, m; string s1, s2;
vector<vector<int>> dp;
int LCS(int m, int n)
{
    if (m == 0 || n == 0) return 0;

    if (dp[m][n] != -1) return dp[m][n];

    if (s1[m - 1] == s2[n - 1]) return dp[m][n] = 1 + LCS(m - 1, n - 1);

    return dp[m][n] = max(LCS(m - 1, n), LCS(m, n - 1));
}
int main()
{
    cin >> s1;
    s2 = s1;
    m = n = s1.size();
    dp.assign(m + 1, vector<int>(n + 1 , -1));
    reverse(s2.begin(), s2.end());
    cout<< LCS(m,n);
}
Leave a Comment