题意:
给出一个只包含小写字母的串 s,询问满足以下条件的子序列的个数:
1、这个子序列中的所有字符都是小写字母a。
2、如果这个子序列的长度大于1,那么这个子序列中的每两个字母之间一定要包含一个小写字母b。
答案模109+7。
|s|≤105。
题解:
思维题,难在思维,但dp也能做。(dp我就不讲了)
我们发现字符串s,可以看成被b分成了若干a的串。
我们发现由于连续的a直接必须有b,所以每一段a串可以取0或1个a。
取1个a的话,方案数是就是size[i],取0个a的话,方案数就是1。
所以答案就是∏(size[i]+1)−1
为什么要减1呢,因为每一段a串全取0个a的情况是不合法的,要除去。
代码:
1 |
|