https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
문자열 + dp 기본 문제
너무 좋은 LCS 알고리즘 설명글도 아래에 공유
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <set>
#include <sstream>
using namespace std;
string str1, str2;
int idx1, idx2, ans = 0;
int dp[4001][4001] = { 0, };
int main() {
ios::sync_with_stdio(0);
cout.tie(0);
cin >> str1 >> str2;
int len1 = str1.length(), len2 = str2.length();
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
if (str1.at(i) == str2.at(j)) {
dp[i + 1][j + 1] = dp[i][j] + 1;
if (ans < dp[i + 1][j + 1])
ans = dp[i + 1][j + 1];
}
}
}
cout << ans;
return 0;
}
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
'알고리즘 > 알고리즘' 카테고리의 다른 글
[C++] 백준 20166번 : 문자열 지옥에 빠진 호석 (0) | 2022.05.13 |
---|---|
[C++] 백준 2866번 : 문자열 잘라내기 (0) | 2022.05.13 |
[C++] 백준 20413번 : MVP 다이아몬드 (Easy) (0) | 2022.05.08 |
[C++] 프로그래머스 : 소수찾기 (0) | 2022.03.10 |
[C++] 프로그래머스 : 코딩테스트연습_정렬 (0) | 2022.02.21 |