본문 바로가기
코딩테스트

[백준] 5582번 '공통 부분 문자열' - Java

by CuckooBird 2023. 7. 29.

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로 설정하고, 좌측 상단 대각선 값과 더하여 연속을 나타냅니다.