LeetCode 115 不同的子串行

2022-09-22 02:45:06 字數 723 閱讀 4880

基本思想:

本來想用dfs加剪枝,發現不太好寫,此次題目沒想到還是採用dp思想;

主要難在方程的構建,主旨思想是通過區間判別;

其中dp為二維陣列,其中dp[i][j]為s[0:i]和t[0:j]中元素相等個數;

對於0~i個元素,如果s[i]=t[j],可以產生兩種0-i-1子串行遞迴判定思想:

1.如果接受s[i]=t[j],則直接加上dp[i-1][j-1],即判斷之前的子串行;

2.如果不接受s[i]=t[j],則判斷s[0:i-1]和t[0:j]相同個數(因為t是固定的判定序列,無多於元素);

所以整體的dp狀態轉移方程為:

dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];

同理,如果s[i]!=t[j],dp轉移方程和第二種情況相同,為:

dp[i][j] = dp[i - 1][j];

dp邊界分為兩種情況:

1.當t的j=0時,只有s清除為0這一種情況,此時s,t完美匹配一次,所以dp[i][0]=1;

2.當s的i=0時,無論什麼時候都無法匹配,所以dp[0][j]=0;

整體**:

int numdistinct(string s, string t) 

for (int i = 1; i < m+1; i++)

else

} }return dp[m][n];

}

leetcode 115 不同的子串行

思路 動態規劃 狀態定義 f x,y 記t中 0,x 範圍的子串為t 記s中 0,y 範圍的子串為s f x,y 表示在s 中t 出現的個數。狀態轉移 1 對於x 0的情況,a 當y 0時,如果s.charat 0 t.charat 0 則f 0,0 1 否則f 0,0 0。b 當y 0 時,如果s...

leetcode 115 不同的子串行

遞迴超時 唉 設dp i j 表示s 0 i 1 的子串行中t 0 j 1 出現的次數,則 1.若s i 1 t j 1 dp i j dp i 1 j 1 用s i 1 與t j 1 配對 dp i 1 j 拋棄s i 1 不用s i 1 與t j 1 配對 2.若s i 1 t j 1 dp i...

leetcode 115 不同的子串行

給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 示例 1 輸入 s rabbbit t rabbit 輸出 3 解...