字串中子序列出現次數

2022-03-11 14:31:32 字數 1020 閱讀 7534

題目鏈結

題意,給乙個字串,求子序列「cwbc」出現的次數

分析:dp,滾動陣列

令 f[i][j],(j = 1,2,3,4) 表示前 i 個字元中,匹配了字串」cwbc」 的前多少位,那麼有轉移方程:

f[i][1] = (f[i−1][1] + (s[i] ==′ c′)) % mod

f[i][2] = (f[i−1][2] + (s[i] ==′ w′)∗f[i−1][1]) % mod

f[i][3] = (f[i−1][3] + (s[i] ==′ b′)∗f[i−1][2]) % mod

f[i][4] = (f[i−1][4] + (s[i] ==′ c′)∗f[i−1][3]) % mod

記憶體超標。使用滾動陣列優化開銷:

f[1] = (f[1] + (s[i] ==′ c′)) % mod

f[2] = (f[2] + (s[i] ==′ w′)∗f[1]) % mod

f[3] = (f[3] + (s[i] ==′ b′)∗f[2]) % mod

f[4] = (f[4] + (s[i] ==′ c′)∗f[3]) % mod

**中動規的第二維正著來反著來都沒區別,因為互有關聯的21,32,43都是二者只可能有乙個執行的,而14雖然都有可能執行,但互不影響

1 #include 2

using

namespace

std;

3const

int inf=1

<<30

;4 typedef long

long

ll;5

const

double pi=acos(-1);6

const

int mod=2000120420010122;7

const

int maxn=2e5+7

;8 ll dp[5];9

intmain()

20 cout<4]<22return0;

23 }

計算字串中子串出現的次數

2.計算字串中子串出現的次數利用輸入函式輸入任意兩個字串,請編寫程式求出第二個字串在第乙個字串 現的次數,即在第乙個字串中有幾個第二個字串。例1 輸入123sdk123dfg123121 123輸出 3 例2 輸入 1wdfw112sfrtes wq輸出 0 include include int ...

字串出現最大次數

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 在美麗大興安嶺原始森林中存在數量繁多的物種,在勘察員帶來的各種動物資料中有未統計數量的原始動物的名單。科學家想判斷這片森林中哪種動物的數量最多,但是由於資料太過龐大,科學家終於忍受不了,想請聰明如你的acmer來幫忙。輸入 第一...

字串中子串問題

字串中子串的位置查詢 include include include 定義查詢函式原型 intsearchzc char str1,char substr int main intsearchzc char str1,char substr j 0 else i 當然也可以使用strstr 函式去尋...