leetcode 1143. pikim ühine alamjärjestus (dünaamiline programmeerimine)

Leetcode 1143 Longest Common Subsequence



Kui antakse kaks stringi text1 ja text2, tagastab kahe stringi pikima ühise järje.

Järjekord viitab uue stringi stringile: see on uus string pärast originaalse stringi kustutamist mõned märgid, muutmata märgi suhtelist järjekorda (või ei pruugi ühtegi märki kustutada).



Näiteks 'äss' on alamjärjestused 'abcde', kuid alamjärjestused 'aec' kui 'abcde'. Kaks „ühise alamjärjestuse” stringi on kahe stringi järjeldus.



Kui kaks stringi pole ühised, tagastatakse järjestus 0.



Näide 1:

Sisend: text1 = 'abcde', text2 = 'äss'

Väljund: 3



Tõlgendamine: pikim üldine järelmärk on 'äss', selle pikkus on 3.

Näide 2:

Sisend: text1 = 'abc', text2 = 'abc'

Väljund: 3

Tõlgendus: pikim levinud järelsõna on „abc”, selle pikkus on 3.

Näide 3:

Sisend: text1 = 'abc', text2 = 'def'

Väljund: 0

Selgitus: kaks stringi ei ühine järjega, tagastatakse 0.

viip:

1<= text1.length <= 1000

1<= text2.length <= 1000

Sisestusstring sisaldab ainult väiketähti.

Resolutsioon: https://leetcode-cn.com/problems/longest-common-subsequence/solution/chao-xiang-xi-dong-tai-gui-hua-jie-fa-by-shi-wei-h/

class Solution { public: int longestCommonSubsequence(string text1, string text2) { int len1 = text1.size() int len2 = text2.size() if(len1==0 || len2==0) return 0 vector dp(len1+1,vector (len2+1,0)) for(int i=1i<=len1++i) for(int j=1j<=len2++j) { dp [i] [j] = max3 (dp [i-1] [j], dp [i] [j-1], dp [i-1] [j-1] + (text1 [i-1] = = text2 [j-1])) // note is the subscript i-1 text1 } return dp[len1][len2] } int max3(int i,int j,int k){ return max(i,max(j,k)) } }