解题思路:
看起来很复杂的题目,我是通过动态规划求出来了所有的回文序列的左右端点的值,然后对每个子序列的单独进行判断是否是符合要求的子序列,只过了5个测试点。其实这道题和一般的回文序列问题不大一样,它只有A和B两个字母,所以关键是找到不满足要求的子序列的形式,只有四种:ABBB…,BAAA…,AAA…B,BBB…A,然后计算出这四种类型的子序列的个数,由子序列总数减去这四种类型的子序列的个数即可。注意我们只考虑长度大于等于2的子序列,单个字母一定不符合要求。计算这四种类型的子序列的个数时,从前向后遍历,遇到两个不同字母的交界处时,计算当前累积的mycount的值,如果没有到不同字母的交界处,则持续减1,直到遇到两个不同字母的交界处或者序列遍历结束。
参考代码:
#include <iostream>
#include <cstdio>
#