Leetcode Java Longest Common Subsequence
업데이트:
문제
코드
class Solution {
public int longestCommonSubsequence(String text1, String text2) {
char[] text1CharArray = text1.toCharArray();
char[] text2CharArray = text2.toCharArray();
int text1Length = text1CharArray.length;
int text2Length = text2CharArray.length;
int[][] dp = new int[text1Length + 1][text2Length + 1];
for (int i = 1; i <= text1Length; i++) {
for (int j = 1; j <= text2Length; j++) {
if (text1CharArray[i - 1] == text2CharArray[j - 1]) {
dp[i][j] = 1 + dp[i - 1][j - 1];
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[text1Length][text2Length];
}
}
결과
설명
-
text1과 text2의 중간 문자들만 제거하여 동일하게 만들 수 있는 가장 긴 길이를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- text1CharArray와 text2CharArray는 text1과 text2를 문자 배열로 변환하여 저장한 변수이다.
- text1Length와 text2Length는 text1과 text2의 문자 길이를 저장한 변수이다.
- dp는 가장 긴 문자열의 길이를 찾기 위한 배열로, $(text1Length + 1) \times (text2Length + 1)$ 크기의 2차원 배열로 초기화한다.
- 1부터 text1Length 이하까지 i를 증가시키고, 1부터 text2Length 이하까지 j를 증가시키며 아래를 반복한다.
- text1CharArray[$i - 1$] 문자와 text2CharArray[$j - 1$] 문자가 동일한 경우, dp[i][j]에 현재까지 위치를 추가하여 $1 + dp[i - 1][j - 1]$의 값을 넣어준다.
- 위의 경우가 아닌 경우, 이전 위치까지 각 경우인 dp[i][j]에 dp[$i - 1$][j]와 dp[i][$j - 1$] 중 큰 값을 넣어준다.
- 반복이 완료되면 가장 긴 길이가 저장된 dp[text1Length][text2Length]의 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기