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