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