暗黑的字串

2021-08-29 02:16:01 字數 1331 閱讀 4064

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

baacaaccbaaa 連續子串"cba"中包含了'a','b','c'各乙個,所以是純淨的字串

aabbccaabb 不存在乙個長度為3的連續子串包含'a','b','c',所以是暗黑的字串

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

輸入描述:

輸入乙個整數n,表示字串長度(1 ≤ n ≤ 30)
輸出描述:

輸出乙個整數表示有多少個暗黑字串
示例1

「高深」的動態規劃:

設a[i]為末尾兩字母結尾相同的暗黑字串,aa,bb,cc。

設b[i]為末尾兩字母結尾不同的暗黑字串,如ab,bc。

總暗黑字串 r[i]=a[i]+b[i] 。

如果a結尾新增乙個字母還是暗黑字串,填任意字母即可,3種填法。

如果b結尾新增乙個字母還是暗黑字串,只能從結尾兩字母中選出乙個,2種填法。

r[i]=3*a[i-1]+2*b[i-1]=2*r[i-1]+a[i-1] ( 因為r[i]=a[i]+b[i] )

得到末尾兩字母相同的暗黑字串a[i-1]:在r[i-2]的暗黑字串結尾加上與末尾相同的字母,只有一種填法。於是a[i-1]=r[i-2] 。

r[i]=3*a[i-1]+2*b[i-1]=2*r[i-1]+a[i-1] =2*r[i-1]+r[i-2] 

r[i]=2*r[i-1]+r[i-2] 直接帶進去算就可以了。

暗黑的字串

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

暗黑字串

題目 乙個只包含 a b c 的字串,如果存在一段長度為3的連續子串中,恰好有 a b c 各有乙個,那麼這個字串就是純淨字串,否則這個字串是暗黑的。例如 baacaaccbaaa這個字串就是暗黑的。例如 baacaaccbaaa這個字串就是純淨的,因為其連續子串中包含了 c b a 各乙個。你的任...

演算法題 暗黑的字串

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