반응형
https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
dp문제였습니다.
풀이방법
d[i][j] = i부분과 j부분의 문자가 같다면 그 이전의 최대길이 + 1 로 정의합니다.
Code
#include <bits/stdc++.h>
using namespace std;
string s, t;
int ans, d[4001][4001];
int main(){
cin >> s >> t;
for(int i = 0; i < s.size(); i++){
for(int j = 0; j < t.size(); j++){
if(s[i] == t[j]){
d[i+1][j+1] = d[i][j] + 1;
ans = max(ans,d[i+1][j+1]);
}
}
}
cout << ans << '\n';
}
Test Case
질문 게시판에 있는 반례들입니다.
입력:
PORPOISE
PROPORTION
정답:
3
입력:
ACMICPC
ACMICPCNET
정답:
7
'Algorithm > DP(Dynamic Programing)' 카테고리의 다른 글
(C++) - 프로그래머스(2017 카카오코드 예선) : 보행자 천국 (0) | 2021.07.24 |
---|---|
(C++) - 백준(BOJ) 14728번 : 벼락치기 (0) | 2021.07.23 |
(C++) - 백준(BOJ) 1915번 : 가장 큰 정사각형 (0) | 2021.07.15 |
(C++) - 백준(BOJ) 1932번 : 정수 삼각형 (0) | 2021.07.15 |
(C++) - 백준(BOJ) 5557번 : 1학년 (0) | 2021.07.09 |