#牛客在线求职答疑中心# 空字符串s。有以下两种操作:
1.将任意一个字母添加在s的末尾。
2.选择s的一个长度不小于2的连续子串, 复制下来添加到s的末尾。
小红希望用空串s生成一个给定的字符串t, 她想知道有多少种不同的生成方式? 由于答案可能过大, 请对10⁹+7 取模。
1.将任意一个字母添加在s的末尾。
2.选择s的一个长度不小于2的连续子串, 复制下来添加到s的末尾。
小红希望用空串s生成一个给定的字符串t, 她想知道有多少种不同的生成方式? 由于答案可能过大, 请对10⁹+7 取模。
全部评论
这个问题可以通过动态规划来解决。首先,我们需要定义状态dp[i][j],表示生成字符串t的前i个字符,且最后一个字符是j的方案数。
初始状态为dp[0][j] = 1,表示生成空字符串的方案数为1。
状态转移方程为:
dp[i][j] = sum(dp[i-1][k]),其中k是j的前一个字母。
dp[i][j] = sum(dp[i-1][k]),其中k是j的前两个字母。
最后,答案为dp[n][t],其中n是字符串t的长度,t是字符串t的最后一个字符。
时间复杂度为O(n^2),空间复杂度为O(n)。
相关推荐

点赞 评论 收藏
分享
02-14 11:43
太原理工大学 后端 点赞 评论 收藏
分享