https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
문제
코드
import java.io.*;
import java.util.*;
public class Main {
private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String str1 = bf.readLine();
String str2 = bf.readLine();
int[][] arr = new int[str1.length()][str2.length()];
int ans = 0;
for(int i = 0 ; i < str1.length() ; i++) {
for(int j = 0 ; j < str2.length() ; j++) {
if(str1.charAt(i) == str2.charAt(j)) {
arr[i][j] = 1;
if(i > 0 && j > 0) {
arr[i][j] += arr[i-1][j-1];
}
ans = Math.max(ans, arr[i][j]);
}
}
}
bw.write(Integer.toString(ans));
bf.close();
bw.flush();
bw.close();
}
}
문자열의 문자를 순회하면서 같은 문자의 인덱스는 1로 설정하고, 좌측 상단 대각선 값과 더하여 연속을 나타냅니다.
'코딩테스트' 카테고리의 다른 글
[백준] 1253번 '좋다' - Java (1) | 2023.08.01 |
---|---|
[백준] 1263번 '시간 관리' - Java (1) | 2023.07.31 |
[백준] 1937번 '욕심쟁이 판다' - Java (1) | 2023.07.28 |
[백준] 1756번 '피자 굽기' - Java (0) | 2023.07.27 |
[백준] 1027번 '고층 건물' - Java (1) | 2023.07.26 |