暗黑字串

2021-08-20 20:21:28 字數 1453 閱讀 1897

題目:

乙個只包含』a』、』b』、』c』的字串,如果存在一段長度為3的連續子串中,恰好有』a』、』b』、』c』各有乙個,那麼這個字串就是純淨字串,否則這個字串是暗黑的。

例如:baacaaccbaaa這個字串就是暗黑的。例如:

baacaaccbaaa這個字串就是純淨的,因為其連續子串中包含了』c』、』b』、』a』各乙個。

你的任務就是計算出長度為n的字串(包含』a』、』b』、』c』),有多少個是暗黑的字串。

比如輸入:

2 3

輸出:

9 21

分析:

說實話,一開始沒怎麼看懂題目意思。再仔細看求長度為n的字串,有多少個暗黑字串。而相對的純淨字串是連續為3的字串中,分別有abc三個不同的字元。

因此理解:

n=1的時候,一定有 a、b、c三種

n=2的時候,有aa,ab,ac,ba,bb,bc,ca,cb,cc 這九種。

n=3的時候,可以用 3^3 - (abc的全排列) = 21

那n=4的時候呢? 就必須具體分析,得到相應的規律。

當字串為n的時候:

f(n) 表示暗黑字串的個數。

s(n) 表示最後兩位相同的黑暗字串個數

d(n)表示最後兩位不同的暗黑字串個數

得出 f(n) =s(n)+d(n)
繼續考慮f(n)與f(n-1)的關係,才能得出遞推式

s(n-1)的後兩位一定是相同的,因此新加入的一位可以是abc任意乙個!!

如 ***aa ,由於s(n-1)本身已經是暗黑字串,就不用考慮前面了,只需要考慮最後兩位,再加入一位使得字串依舊是暗黑字串,***aab, ***aaa,***aac 有三種情況

d(n-1)的後兩位是不同的,因此新加入的一位,一定要是後兩位其中之一

如 ***ab, 要保證加入一位依然是暗黑字串,那麼只能選擇前面的兩位之一 ***aba, ***abb 兩種情況

f

(n) = 3s

(n-1)+2d

(n-1) = 2f

(n-1)+s

(n-1)

繼續分析,s(n-1) 表示後兩位相同,因此等同於 s(n-1) 只有後一位,因此等於f(n-2).

f

(n) = 2f

(n-1)+f

(n-2)

**如下:

public

static

void

main(string args)

int n = 0;

while(scanner.hasnext())

}

網易0912 暗黑字串

題目的大意 乙個字串只能由 a b c 三個字母組合而成 若在字串中如果 a b c 三個字元任意組合出現,則此字串為清澈的,否則為黑暗的。如 aabbccabaa 因為包含 cab 所以是清澈的 aabbccbcbba 則是黑暗的。輸入 字串的長度n 1 n 30 輸出 包含的黑暗字串的個數 樣例...

動態規劃(一)暗黑字串

1.題目描述 輸入乙個整數n,表示字串長度 1 n 30 輸出乙個整數表示有多少個暗黑字串321思路 要想推出來f n 與f n 1 的關係,首先思考現在有兩個字元在新增乙個成為暗黑格仔,有兩種情況,d n 1 代表前兩個字元是相等的,那麼此時有三種情況abc都可以,3 d n 1 s n 1 代表...

求解暗黑字串(網易2017秋招)

問題描述 乙個只包含 a b 和 c 的字串,如果存在某一段長度為3的連續子串中恰好 a b 和 c 各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如 baacaaccbaaa 連續子串 cba 中包含了 a b c 各乙個,所以是純淨的字串 aabbccaabb 不存在乙個長度為3的...