Skip to content

Commit 9402dca

Browse files
committed
solve: longest common subsequence
1 parent a4a6325 commit 9402dca

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* 알고달레 풀이 참고해서 풀었습니다.
3+
* @see https://www.algodale.com/problems/longest-common-subsequence/
4+
*
5+
* DP + 2차원 배열을 이용한 풀이
6+
* 행은 text1, 열은 text2에 대응하고
7+
* index는 text의 처음부터 몇개 문자를 사용할건지 의미합니다.
8+
* 마지막 문자가 동일하다면 dp[index1][index2] = dp[index1 - 1][index2 - 1] + 1
9+
* 마지막 문자가 다르다면 dp[index1][index2] = Math.max(dp[index1 - 1][index2], dp[index1][index2 - 1])
10+
*
11+
* TC: O(T1 * T2)
12+
* 2차원 배열을 순회
13+
*
14+
* SC: O(T1 * T2)
15+
* 2차원 배열 생성
16+
*
17+
* T1: text1.length, T2: text2.length
18+
*/
19+
20+
/**
21+
* @param {string} text1
22+
* @param {string} text2
23+
* @return {number}
24+
*/
25+
var longestCommonSubsequence = function (text1, text2) {
26+
const LENGTH1 = text1.length;
27+
const LENGTH2 = text2.length;
28+
const memory = Array.from({ length: LENGTH1 + 1 }, () =>
29+
Array.from({ length: LENGTH2 + 1 }, () => 0)
30+
);
31+
32+
for (let index1 = 1; index1 <= LENGTH1; index1++) {
33+
for (let index2 = 1; index2 <= LENGTH2; index2++) {
34+
if (text1[index1 - 1] === text2[index2 - 1]) {
35+
memory[index1][index2] = memory[index1 - 1][index2 - 1] + 1;
36+
} else {
37+
memory[index1][index2] = Math.max(
38+
memory[index1 - 1][index2],
39+
memory[index1][index2 - 1]
40+
);
41+
}
42+
}
43+
}
44+
45+
return memory[LENGTH1][LENGTH2];
46+
};

0 commit comments

Comments
 (0)