兩個(gè)字符串的最長公共子串的長度

題目

兩個(gè)字符串的最長公共子串的長度
例如:
“ABCDGH”和“AEDFHR”的最長公共子串為“ADH”逆趋,長度為3盏阶。
“AGGTAB”和“GXTXAYB”的最長公共子串為“GTAB”晒奕,長度為4闻书。

解析

兩個(gè)字符串的最長公共子串是一個(gè)常見的問題,《算法導(dǎo)論》中介紹動(dòng)態(tài)規(guī)劃的一個(gè)示例脑慧。假設(shè)兩個(gè)字符串為str1和str2魄眉,遍歷的下標(biāo)分別為i1和i2。二維數(shù)組array[][]存儲(chǔ)結(jié)果闷袒。

  1. 如果i1=0或者i2=0坑律,最長公共子串長度為0。
  2. 如果str1[i1]=str2[i2]囊骤,字符為Z晃择,最長公共子串就是str1[0~i1-1]和str2[0~i2-1]兩個(gè)子串的最長公共子串加上Z。
  3. 如果str1[i1]不等于str2[i2]也物,最長公共子串可能是str1[0~i1]和str2[0~i2-1]宫屠,或者是str1[0~i1-1]和str2[0~i2]中的最長公共子串。

代碼

public int lengthOfLCS(String str1, String str2){
    if (null == str1 || str1.length() == 0){
        return 0;
    }
    if (null == str2 || str2.length() == 0){
        return 0;
    }
    int length1 = str1.length();
    int length2 = str2.length();
    //array[i1][i2]記錄兩個(gè)子串的最長公共子串長度
    int[][] array = new int[length1 + 1][length2 + 1];
    //動(dòng)態(tài)規(guī)劃滑蚯,計(jì)算二維數(shù)組其他位置的值
    for (int i1 = 1; i1 < length1 + 1; i1++){
        for (int i2 = 1; i2 < length2 + 1; i2++){
            //如果兩個(gè)字符相同
            if (str1.charAt(i1 - 1) == str2.charAt(i2 - 1)){
                //最長公共子串長度
                array[i1][i2] = array[i1 - 1][i2 - 1] + 1;
            } else {//如果兩個(gè)字符不同
                //最長公共子串長度為包含當(dāng)前其中一個(gè)字符的公共子串的最大值
                array[i1][i2] = Math.max(array[i1 - 1][i2], array[i1][i2 - 1]);
            }
        }
    }
    //返回兩個(gè)字符串的最長公共子串的長度
    return array[length1][length2];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浪蹂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子告材,更是在濱河造成了極大的恐慌坤次,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斥赋,死亡現(xiàn)場(chǎng)離奇詭異缰猴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疤剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門滑绒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骚露,你說我怎么就攤上這事蹬挤。” “怎么了棘幸?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵焰扳,是天一觀的道長。 經(jīng)常有香客問我,道長吨悍,這世上最難降的妖魔是什么扫茅? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮育瓜,結(jié)果婚禮上葫隙,老公的妹妹穿的比我還像新娘。我一直安慰自己躏仇,他們只是感情好恋脚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焰手,像睡著了一般糟描。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上书妻,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天船响,我揣著相機(jī)與錄音,去河邊找鬼躲履。 笑死见间,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的工猜。 我是一名探鬼主播米诉,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼域慷!你這毒婦竟也來了荒辕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤犹褒,失蹤者是張志新(化名)和其女友劉穎抵窒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叠骑,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡李皇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宙枷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉房。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慰丛,靈堂內(nèi)的尸體忽然破棺而出卓囚,到底是詐尸還是另有隱情,我是刑警寧澤诅病,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布哪亿,位于F島的核電站粥烁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝇棉。R本人自食惡果不足惜讨阻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篡殷。 院中可真熱鬧钝吮,春花似錦、人聲如沸板辽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戳气。三九已至链患,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓶您,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工纲仍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呀袱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓郑叠,卻偏偏與公主長得像夜赵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乡革,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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