leetcode, LC36 不同的子串行

2021-10-10 14:26:46 字數 780 閱讀 9541

給定兩個字串s和t,返回s子串行等於t的不同子串行個數有多少個?

字串的子串行是由原來的字串刪除一些字元(也可以不刪除)在不改變相對位置的情況下的剩餘字元(例如,"ace"is a subsequence of"abcde"但是"aec"不是)

例如:s=「nowcccoder」, t = 「nowccoder」

返回3我們需要乙個二維陣列dp(i)(j)來記錄長度為i的字串在長度為j的母串**現的次數,這裡長度都是從頭算起的,而且遍歷時,保持子串長度相同,先遞增母串長度,母串最長時再增加一點子串長度重頭開始計算母串。

首先我們先要初始化矩陣,當子串長度為0時,所有次數都是1,當母串長度為0時,所有次數都是0.當母串子串都是0長度時,次數是1(因為都是空,相等)。接著,如果子串的最後乙個字母和母串的最後乙個字母不同,說明新加的母串字母沒有產生新的可能性,可以沿用該子串在較短母串的出現次數,所以dp(i)(j) = dp(i)(j-1)。如果子串的最後乙個字母和母串的最後乙個字母相同,說明新加的母串字母帶來了新的可能性,我們不僅算上dp(i)(j-1),也要算上新的可能性。那麼如何計算新的可能性呢,其實就是在既沒有最後這個母串字母也沒有最後這個子串字母時,子串出現的次數,我們相當於為所有這些可能性都新增乙個新的可能。所以,這時dp(i)(j) = dp(i)(j-1) + dp(i-1)(j-1)。下圖是以rabbbit和rabbit為例的矩陣示意圖。計算元素值時,當末尾字母一樣,實際上是左方數字加左上方數字,當不一樣時,就是左方的數字。

class

solution

};

leetcode, LC7 求二叉樹的前序遍歷

輸入 輸出 1,2,3 遞迴 遞迴終止條件 如果根結點為空,則返回空向量 遞迴體 否則 2.1.將根結點的 val 推入返回向量的尾部 2.2.遞迴遍歷左子樹,將遞迴遍歷左子樹的結果向量合併到返回向量中 2.3.遞迴遍歷右子樹,將遞迴遍歷右子樹的結果向量合併到返回向量中 返回返回向量 struct ...

36 小草的生日

問題描述 小草的生日快到了,小草希望是在週末,小草請你幫忙算出他生日在星期幾。輸入三個正整數,分別表示年 月 日。保證輸入年份合法。輸出星期幾。用monday tuesday wednesday thursday friday saturday sunday表示星期幾。樣例輸入11 1 1 樣例輸出...

我的學習記錄36

2017.11.15李錦浩 第36天 今天完成了前天未完成的程式,由於時間原因沒能挑食完成,可能還存在著一部分編譯問題,需要進一步找尋bug。另外今天學習了關於類的定義和知識。附 職工統計表 pragma once include using namespace std struct node vo...