給定乙個字串 s 和乙個字串 t ,s = "rabbbit", t = "rabbit",計算在 s 的子串行中 t 出現的個數。
字串的乙個 子串行是指,通過刪除一些(也可以不刪除)字元且不干擾剩餘字元相對位置所組成的新字串。(例如,"ace" 是 "abcde" 的乙個子串行,而 "aec" 不是)
此時我們通過矩陣來解決該問題,矩陣的列為母串,行為子串。建立乙個二維陣列x,對陣列進行初始化,當子串長度為0時,所有次數都是1,當母串長度為0時,所有次數都是0。接著,如果子串的最後乙個字母和母串的最後乙個字母不同,說明新加的母串字母沒有產生新的可能性,可以沿用該子串在較短母串的出現次數,所以x[i][j] = x[i][j-1]。如果子串的最後乙個字母和母串的最後乙個字母相同,說明新加的母串字母帶來了新的可能性,我們不僅算上x[i][j-1],也要算上新的可能性。新的可能性其實就是在既沒有最後這個母串字母也沒有最後這個子串字母時,子串出現的次數,我們相當於為所有這些可能性都新增乙個新的可能。所以,這時x[i][j] = x[i][j-1] + x[i-1][j-1],下圖是以rabbbit和rabbit為例的矩陣示意圖。計算元素值時,當末尾字母一樣,實際上是左方數字加左上方數字,當不一樣時,就是左方的數字。ra
bbbi
t012
3456
7011
1111
11r1
0111
1111
a200
1111
11b3
0001
2333
b400
0013
33i5
0000
0033
t600
0000
03j**a實現**:
classsolution
return
x[t.length()][s.length()];
}}
力扣解題思路 115 不同的子串行 糾錯記錄
思路 給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 題目資料保證答案符合 32 位帶符號整數範圍。輸入 s ra...
力扣每日一題115 不同的子串行
1.暴力法超時 class solution if i s.size i t.size return 到任意末端返回 if s i t i else return public int numdistinct string s,string t 2.動態規劃 從後往前遍歷 dp i j 代表 s i...
力扣 1143 最長公共子串行
給定兩個字串text1和text2,返回這兩個字串的最長公共子串行的長度。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。兩個字串的...