宝石序列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

这是中国式家长中的一个小游戏。

有一个宝石的序列,宝石有 4 种颜色,分别用 ABCD 表示,每个宝石上写着一个数字代表阶数,玩家每次操作可以选择一个宝石删除掉,然后从右往左对这个序列进行检查,如果出现了 3 个阶为 x 的同色的宝石,那么它们会合并成一个阶数为 x + 1,颜色与之前的 3 个宝石一致的宝石(比如 A(2)A(2)A(2) -> A(3)),不断地进行这个检查,直到序列不会发生宝石的合并为止。

ABCD 分别代表 4 种不同的宝石,给一个长度为  的由 ABCD 构成的序列,初始状态下,所有宝石为一阶,且不会有 3 个同色的宝石连续出现。 先要求消除掉整个序列,输出最小步数。

输入描述:

一个字符串 str 

输出描述:

输出一个整数,表示最小的操作数。
示例1

输入

复制
AABA

输出

复制
2
示例2

输入

复制
AABBCBA

输出

复制
3

备注:

样例1:删除 B 后,序列会先变成 3 个一阶的 A,然后自动合并成一个 2 阶的 A 宝石,然后再删除这个 2 阶
的 A,序列就被完全消除了。
样例2:删除 C 后,序列变成 AAB(2)A,再删除 B(2),序列变成 A(2),再删除 A(2) 序列变成空序列。