题目类型 DP
题目意思
给出一个最多150字符长的只有a或b或c组成的字符串
对于每个操作可以把前面一个字符变成后面一个字符或者把后面的一个字符变成前面一个字符
即可以执行赋值语句 str[i+1] = str[i]; 或者 str[i] = str[i+1];
如果原
字符串在执行若干次操作后变成一个a,b,c的字符数量相互不超过1的 字符串, 那么称得到的串为一个合法串
问合法串有多少个
例如输入字符串 aaacb 其中a有3个,b有1个,c有1个 3-1>1 不合法
但是可以把 第3个a变成 c -> aaccb a有2个,b有1个,c有2个, 相互之间的数量都不超过1 所以 aaccb 就是一个合法的串
解题方法
假设输入的字符串是 A, 字符串 A'是 A串的相同字符压缩成一个后的结果 (例如 aacbbb 压缩成 acb)
假设一个合法串B, B'是B压缩后的字符串
这时会发现 如果 B 是由 A 经过若干次操作得到的结果, 那么 B' 是 A'的一个子序列