728x90

www.acmicpc.net/problem/5582

 

5582번: 공통 부분 문자열

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

www.acmicpc.net

처음에는 LCS 문제인 줄 알았는데 연속하는 공통된 문자열을 구하는 것이었다. LCS와 비슷하게 동적 계획법으로 풀었다.

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	string s1, s2;
	cin >> s1 >> s2;
	int maxDp = 0;
	vector<vector<int>> dp(s1.length() + 1, vector<int>(s2.length() + 1));
	for (int i = 1; i <= s1.length(); i++) {
		for (int j = 1; j <= s2.length(); j++) {
			if (s1[i - 1] == s2[j - 1]) {
				dp[i][j] = dp[i - 1][j - 1] + 1;
			}
			else {
				dp[i][j] = 0;
			}
			if (dp[i][j] > maxDp)
				maxDp = dp[i][j];
		}
	}
	cout << maxDp;
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 2217번 로프  (0) 2021.01.02
[백준] 10799번 쇠막대기  (0) 2021.01.02
[백준] 3055번 탈출  (0) 2020.09.04
[백준] 13904번 과제  (0) 2020.09.02
[백준] 1038번 감소하는 수  (0) 2020.09.01

+ Recent posts