문제(출처: https://www.acmicpc.net/problem/5582)
< 공통 부분 문자열 >
문제 풀이
배열 2개를 사용해서 공통부분 문자열을 구한다.
만약 abcd와 bacd라면 아래와 같이 만들어지도록 구현한다.
a | b | c | d | |
b | 0 | 1 | 0 | 0 |
a | 1 | 0 | 0 | 0 |
c | 0 | 0 | 1 | 0 |
d | 0 | 0 | 0 | 2 |
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _5582_ { // 공통 부분 문자열
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String a = bf.readLine();
String b = bf.readLine();
int arr[][] = new int[a.length() + 1][b.length() + 1];
int result=0;
for (int i = 0; i < a.length(); i++) {
for (int j = 0; j < b.length(); j++) {
if(a.charAt(i)==b.charAt(j)) {
arr[i+1][j+1]=arr[i][j]+1;
result=Math.max(arr[i+1][j+1], result);
}
}
}
System.out.println(result);
}
}
변수)
a, b : 두 문자열
arr : 부분 문자열의 길이 저장
result : 가장 긴 부분 문자열
두 문자열을 전체 순환하면서 문자가 같다면 전 값에 +1을 한 값을 저장한다. 문자가 같을 때마다 가장 긴 부분 문자열의 값을 바꿔준다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 17609_회문 (0) | 2023.12.18 |
---|---|
[Baekjoon] 13398_연속합 2 (1) | 2023.12.15 |
[Baekjoon] 20529_가장 가까운 세 사람의 심리적 거리 (0) | 2023.12.13 |
[Baekjoon] 16198_에너지 모으기 (0) | 2023.12.12 |
[Baekjoon] 1189_컴백홈 (1) | 2023.12.11 |