728x90
https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
ABCD, ACDB 일때 dp 테이블을 다음과 같이 만들 수 있다.
ACD와 ABCD의 값을 구할때, AC, ABC의 최대 길이를 +1 해준다.
즉 점화식을 다음과 같이 세울 수 있다. str[i]==str[j] 일때 , dp[i][j] = dp[i-1][j-1] + 1
str1 = input()
str2 = input()
length1 = len(str1)
length2 = len(str2)
dp = [[0 for _ in range(length2+1)] for _ in range (length1+1)]
maxvalue = 0
for i in range(1, length1+1):
for j in range(1, length2+1):
if str1[i-1] == str2[j-1]:
dp[i][j] = dp[i-1][j-1]+1
maxvalue = max(maxvalue, dp[i][j])
print(maxvalue)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 5639번 : 이진 검색 트리 (0) | 2023.07.17 |
---|---|
[백준] 5052번 : 전화번호 목록 (0) | 2023.07.17 |
[백준] 9935번 : 문자열 폭발 (0) | 2023.07.16 |
[백준] 1932번 : 정수 삼각형 (1) | 2023.07.16 |
[백준] 11660번 : 구간 합 구하기 5 (0) | 2023.07.16 |