Skip to content

Commit d5f084e

Browse files
committed
Time: 22 ms (56.56%), Space: 51.2 MB (11.22%) - LeetHub
1 parent c13f07c commit d5f084e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
1143. 최장 공통 부분수열
3+
4+
두 문자열 text1과 text2가 주어졌을 때,
5+
두 문자열의 최장 공통 부분수열의 길이를 반환합니다.
6+
공통 수열이 없으면 0을 반환합니다.
7+
8+
문자열의 하위 문자열은 원래 문자열에서 일부 문자를 추가하여
9+
원래 문자열에서 일부 문자(없음일 수도 있음)를 삭제하고
10+
나머지 문자의 상대적 순서를 변경하지 않고 생성된 새로운 문자열입니다.
11+
12+
예를 들어, "ace"는 "abcde"의 시퀀스입니다.
13+
14+
두 문자열의 공통 시퀀스는 두 문자열에 공통되는 시퀀스입니다.
15+
16+
17+
예제 1:
18+
19+
입력: text1 = "abcde", text2 = "ace"
20+
출력 3
21+
설명: 최장 공통 부분수열은 "에이스"이며 그 길이는 3입니다.
22+
23+
예제 2:
24+
25+
입력: text1 = "abc", text2 = "abc"
26+
출력: 3 3
27+
설명: 최장 공통 부분수열은 "abc"이며 그 길이는 3입니다.
28+
29+
예제 3:
30+
31+
입력: text1 = "abc", text2 = "def"
32+
출력: 0
33+
설명: 이러한 공통 수열이 없으므로 결과는 0입니다.
34+
35+
36+
제약 조건:
37+
1 <= text1.length, text2.length <= 1000
38+
text1과 text2는 소문자 영어 문자로만 구성됩니다.
39+
*/
40+
41+
class Solution {
42+
public int longestCommonSubsequence(String text1, String text2) {
43+
int[][] dp = new int[text1.length() + 1][text2.length() + 1];
44+
45+
for (int i = 1; i <= text1.length(); i++) {
46+
for (int j = 1; j <= text2.length(); j++) {
47+
if (text1.charAt(i-1) == text2.charAt(j-1))
48+
dp[i][j] = dp[i-1][j-1] + 1;
49+
else
50+
dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
51+
}
52+
}
53+
54+
return dp[text1.length()][text2.length()];
55+
}
56+
}

0 commit comments

Comments
 (0)