https://www.acmicpc.net/problem/5582

 

5582번: 공통 부분 문자열

문제 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예

www.acmicpc.net

LCS 문제인줄 알고 풀었는데 연속된 문자열만 인정하는 문제였다. LCS 하위호환 문제같다.

더보기
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int dp[4001][4001];

int main()
{
    string s1, s2;
    cin >> s1 >> s2;   
    int l1 = s1.length();
    int l2 = s2.length();    
    int mx = 0;
    for (int i = 1; i <= l1; i++) {
        for (int j = 1; j <= l2; j++) {
            if (s1[i - 1] == s2[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;
                if (mx < dp[i][j]) mx = dp[i][j];
            }
        }
    }
    cout << mx;
    return 0;
}