File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed
longest-common-subsequence Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * ๋ ๋ฌธ์์ด์ ์ต์ฅ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด ๊ตฌํ๊ธฐ.
3
+ *
4
+ * @param {string } text1 - ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด
5
+ * @param {string } text2 - ๋ ๋ฒ์งธ ๋ฌธ์์ด
6
+ * @returns {number } - ์ต์ฅ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด
7
+ *
8
+ * ์๊ฐ ๋ณต์ก๋:
9
+ * - O(m * n) : ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ฐ๊ฐ m, n์ด๋ผ๊ณ ํ ๋, DP ํ
์ด๋ธ์ ๋ชจ๋ ์์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
10
+ *
11
+ * ๊ณต๊ฐ ๋ณต์ก๋:
12
+ * - O(m * n) : m+1 x n+1 ํฌ๊ธฐ์ 2์ฐจ์ DP ํ
์ด๋ธ์ ์์ฑํ์ฌ ์ฌ์ฉํฉ๋๋ค.
13
+ */
14
+ function longestCommonSubsequence ( text1 : string , text2 : string ) : number {
15
+ const m = text1 . length ;
16
+ const n = text2 . length ;
17
+
18
+ // DP ํ
์ด๋ธ ์์ฑ (m+1 x n+1 ํฌ๊ธฐ)
19
+ const dp : number [ ] [ ] = Array . from ( { length : m + 1 } , ( ) => Array ( n + 1 ) . fill ( 0 ) ) ;
20
+
21
+ // DP ๊ณ์ฐ
22
+ for ( let i = 1 ; i <= m ; i ++ ) {
23
+ for ( let j = 1 ; j <= n ; j ++ ) {
24
+ if ( text1 [ i - 1 ] === text2 [ j - 1 ] ) {
25
+ // ๋ฌธ์๊ฐ ์ผ์นํ๋ฉด ์ด์ ๊ฐ์ +1
26
+ dp [ i ] [ j ] = dp [ i - 1 ] [ j - 1 ] + 1 ;
27
+ } else {
28
+ // ๋ฌธ์๊ฐ ๋ค๋ฅด๋ฉด ์ผ์ชฝ๊ณผ ์์ชฝ ๊ฐ ์ค ํฐ ๊ฐ ์ ํ
29
+ dp [ i ] [ j ] = Math . max ( dp [ i - 1 ] [ j ] , dp [ i ] [ j - 1 ] ) ;
30
+ }
31
+ }
32
+ }
33
+
34
+ // ์ต์ฅ ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด
35
+ return dp [ m ] [ n ] ;
36
+ }
37
+
You canโt perform that action at this time.
0 commit comments