题目链接
题目类型:DP + KMP
题目来源:2016年多校Round4
题目分析
题目大意
给出一个原串a和一个匹配串b,b串表示两个意思,可以把a串中的所有b串当成两个意思做,问a串可以有多少种不同的意思?
解析
先确定状态dp[i],表示1~i这个串最多共有多少种意思,那么很显然有当(i-lenb~i-1)不为b串时,dp[i]=dp[i-1],否则则有dp[i] = dp[i-1] + dp[i-lenb]。剩下的只需要用kmp去匹配即可。kmp每次处理下一步跳到哪一个位置,当匹配时则下标后移,如果找到匹配串则加上lenb前面的值。
代码
1 |
|