Lintcode118 Distinct Subsequences solution 題解

【題目描述】

Given a stringSand a stringT, count the number of distinct subsequences ofTinS.

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie,"ACE"is a subsequence of"ABCDE"while"AEC"is not).

給出字符串S和字符串T军援,計算S的不同的子序列中T出現(xiàn)的個數(shù)敬辣。

子序列字符串是原始字符串通過刪除一些(或零個)產(chǎn)生的一個新的字符串,并且對剩下的字符的相對位置沒有影響帆阳。(比如橱夭,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)氨距。

【題目鏈接】

www.lintcode.com/en/problem/distinct-subsequences/

【題目解析】

這道題目是一道比較基礎(chǔ)的動態(tài)規(guī)劃題目,關(guān)鍵問題在理解題意和恰當?shù)脑O(shè)計狀態(tài)并列出狀態(tài)轉(zhuǎn)移方程棘劣。關(guān)于狀態(tài)的設(shè)立俏让,主要還是分析題目的步驟,規(guī)劃階段茬暇,然后將每個階段的結(jié)束視為一個狀態(tài)首昔,來進行設(shè)立。

對于這道題目糙俗,我們不妨設(shè)f(i, j)表示S長度為i的前綴和T長度為j的前綴形成的兩個字符串在這道題目下的答案是多少勒奇,即設(shè)S(i)表示S長度為i的前綴,T(j)表示T長度為j的前綴巧骚,則f(i, j)表示有多少個S(i)的子序列等價于T(j)赊颠。那么我們要求解的答案就可以用f(N, M)來表示,其中N是S的長度劈彪,M是T的長度竣蹦。

那么如何求解f(i, j)呢?這就要牽涉到狀態(tài)轉(zhuǎn)移方程沧奴。

我們的目標是將f(i, j)轉(zhuǎn)化為一個類似的子問題痘括,為了達成這種情況,一種思路枚舉與j匹配的最后一個字符,不放設(shè)為S的第k個字符(K<=i)纲菌,則有:

f(i, j) = sum(f(k - 1, j - 1)), 其中k滿足1<=k<=i,S[k]=T[j]

從而挠日,將f(i, j)轉(zhuǎn)化為了若干個規(guī)模變小(兩個參數(shù)都變泻采唷)的問題嚣潜,于是就可以列用這樣的狀態(tài)轉(zhuǎn)移方程進行求解:

按照i,j分別從小到大的順序,依次求解f(i, j)灶芝,這樣在求解時郑原,就可以確保其依賴的所有子問題都已經(jīng)得到了求解。

但是這樣還并沒有達到這道題目的最優(yōu)復(fù)雜度夜涕,不難發(fā)現(xiàn),sum(f(k - 1, j - 1)), 1<=k

這樣一來属愤,狀態(tài)轉(zhuǎn)移的復(fù)雜度就縮減到了O(1)女器,加上狀態(tài)本身的O(NM)的復(fù)雜度,總共是O(NM)的復(fù)雜度住诸。

【參考答案】

www.jiuzhang.com/solutions/distinct-subsequences/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驾胆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贱呐,更是在濱河造成了極大的恐慌丧诺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄薇,死亡現(xiàn)場離奇詭異驳阎,居然都是意外死亡,警方通過查閱死者的電腦和手機馁蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門呵晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沫屡,你說我怎么就攤上這事饵隙。” “怎么了沮脖?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵金矛,是天一觀的道長。 經(jīng)常有香客問我勺届,道長驶俊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任涮因,我火速辦了婚禮废睦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘养泡。我一直安慰自己嗜湃,他們只是感情好奈应,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著购披,像睡著了一般杖挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刚陡,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天惩妇,我揣著相機與錄音,去河邊找鬼筐乳。 笑死歌殃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蝙云。 我是一名探鬼主播氓皱,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勃刨!你這毒婦竟也來了波材?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤身隐,失蹤者是張志新(化名)和其女友劉穎廷区,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贾铝,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡隙轻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忌傻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片大脉。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖水孩,靈堂內(nèi)的尸體忽然破棺而出镰矿,到底是詐尸還是另有隱情,我是刑警寧澤俘种,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布秤标,位于F島的核電站,受9級特大地震影響宙刘,放射性物質(zhì)發(fā)生泄漏苍姜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一悬包、第九天 我趴在偏房一處隱蔽的房頂上張望衙猪。 院中可真熱鬧,春花似錦、人聲如沸垫释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棵譬。三九已至显蝌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間订咸,已是汗流浹背曼尊。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脏嚷,地道東北人骆撇。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像父叙,于是被迫代替她去往敵國和親艾船。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容