考虑dp,设f[i][c]表示前i个字符组成的以c为结尾的合法子序列个数。
假设当前位为j,由于要去重,前面所有以j结尾的子序列对于当前位来说同样可以构造,所以只需要考虑前一位不是以j结尾的答案,同时注意当前这一位可以单独放一个算子序列,所以加上1。
所以转移方程f[i][j] = sum(f[i]) - f[i - 1][j] + 1,最后统计sum(f[n - 1])即可。
由于dp转移只需要考虑前一位,所以可以优化空间复杂度为O(1)。
小蓝有一个全部由数字组成的字符串 s。她打算从 s 中挑选若干个字符,保持原有顺序,形成一个新的非空字符串。为了让新字符串看起来更整洁,她要求新字符串中任意两个相邻字符不能相同。
所有可能且互不相同的这种字符串构成了一个集合。小蓝想知道这个集合的大小。因为答案可能很大,请你输出答案对 109+7 取模的结果。
约束条件:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册