https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
문제 해설
부분 문자열은 한 문자열에서 연속한 부분을 떼어낸 문자열이다.
주어진 문자열 중 긴 문자열에 더미 문자열을 붙이고 완전탐색 시켰는데 통과했다... 얼떨떨했따...
긴 문자열의 비교 시작 부분을 이동시키며, 작은 문자열의 길이만큼 비교했다.
#include <iostream>
#define fio cin.tie(0)->sync_with_stdio(0)
using namespace std;
int max_common(const string& big_, const string& small){
int ret = 0;
string big="";
for(int i=0; i< small.size(); i++){
big += 'x';//더미
}
big += big_;
for(int offset=0; offset< big.size(); offset++){
for(int j=0, cnt=0; j<small.size() && offset+j < big.size(); j++){
if(big[offset+j] == small[j]){
cnt++;
}else{
cnt = 0;
}
ret = max(ret ,cnt);
}
}
return ret;
}
int main() {
fio;
string A, B; cin >> A >> B;
if(A.size() <= B.size()){
cout << max_common(B, A);
}else{
cout << max_common(A, B);
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 BOJ 12849 본대 산책 (0) | 2022.01.04 |
---|---|
백준 BOJ 2749 피보나치 수 3 (0) | 2021.12.30 |
백준 [BOJ] 16936 나3곱2 (0) | 2021.12.29 |
백준 12015 가장 긴 증가하는 부분 수열 2 +a (0) | 2021.12.28 |
백준 12034 김인천씨의 식료품가게 (Large) (0) | 2021.12.27 |