给定一个由大写字母’A’、’B’、’C’构成的字符串s,按如下进行消除过程:

1、字符串s中连续相同字母组成的子串,如果子串的长度大于1,那么这些子串会被同时消除,余下的字符拼成新的字符串。

例如:”ABCCBCCCAA”中”CC”,”CCC”和”AA”会被同时消除,余下”AB”和”B”拼成新的字符串”ABB”。

2、反复进行上述消除,直到新的字符串中相邻字符都不相同为止。

例如:”ABCCBCCCAA”经过一轮消除得到”ABB”,再经过一轮消除得到”A”。

假设在对字符串s消除开始前,允许在s中任意位置(第一个字符之前、最后一个字符之后以及相邻两个字符之间)插入任意一个字符(‘A’,’B’或者’C’),得到字符串t,然后对字符串t经过一系列消除。

请问该如何插入字符,使得字符串t中被消除掉的字符总数(包括插入的字符)最多?

Input

第 1 行:整数 T (1≤T≤10) 为问题数。

第 2 ~ T+1 行:每个问题占一行,每行输入一个由’A’、’B’、’C’组成的字符串s,长度不超过100。

Output

对每个测试数据,首先输出一行问题的编号(0 开始编号,格式:case #0: 等)。在接下来一行中输出被消除掉的最大字符数。

Examples

Input
3
ABCBCCCAA
AAA
ABC
Output
case #0:
9
case #1:
4
case #2:
2

Note

第一组数据:在”ABCBCCCAA”的第2个字符后插入’C’得到”ABCCBCCCAA”,消除后得到”A”,总共消除9个字符(包括插入的’C’)。


 #include <iostream>
#include <string>
using namespace std;
string x[] = { "A","B","C" };
void del(int& ans,string tmp)
{
int len=tmp.size();
while()
{
int flag=;//判断是否可以继续消除
for(string::iterator it=tmp.begin(),t,s;it<tmp.end()-;)//小心it越界
if(*(it+)==*it)
{
flag=;
int x=it-tmp.begin();//x记录上次消除位置,以便从后继续消除
t=it;
while(it<tmp.end()-&&*(it+)==*it) it++;
tmp.erase(t,it+);
x=x<?:x;
it=tmp.begin()+x;
}
else it++;
if(flag==) break;
}
ans=ans>(len-tmp.size())?ans:len-tmp.size();
}
int main()
{
int T;cin>>T;
for(int m=;m<T;m++)
{
string s;cin>>s;
int ans=;
for(int i=;i<=s.size();i++)
{
for(int j=;j<;j++)
{
string tmp=s;tmp.insert(i,x[j]);
del(ans,tmp);
}
}
printf("case #%d:\n%d\n",m,ans); }
return ;
}

在字符串的每个空格(包括首尾)处插入A或B或C,消除连续相同字母组成的字串,判断无可消除字串后退出,经过几次比较,得出消除最多的字符个数。

注意是同时消除,因此应该在消除之后从消除的地方继续向后找字串,而不是从头开始找。

如ABCCBCCCAA,第一次消除CC,CCC,AA,而不是第一次消除得ABBCCCAA,然后继续消除BB,CCC,AAA,这样结果就是全部消除了,这也是我一开始WA的原因。

EOJ 3194 字符串消除的更多相关文章

  1. 【hihocoder 1039 字符串消除】模拟

    题目链接:http://hihocoder.com/problemset/problem/1039 题意:给定一个只由{A, B, C}组成的字符串s,长度为n, 故包含n+1个空隙:现要求在某个空隙 ...

  2. shell 进阶之匹配字符串

      一,操作字符串 1,字符串长度 expr 命令取字符串函数 自带shell函数读取 2,匹配字符串开头字串的长度   !!!!!!!!!!!!$substring是正则表达式.!!!!!!!!! ...

  3. APNS 远程推送通知 PUSH deviceToken

    服务器向客户端推送消息:      当应用程序推到后台,或者根本就没有运行(我们的代码无能为力)      如果这种情况之下,应用程序想和用户交互(传统的做法 不可能)      推送 APNS:Ap ...

  4. 【人在江湖飘,哪有不带刀】神器Jumony

    大神博客:http://www.cnblogs.com/Ivony/p/3447536.html 项目地址:https://github.com/Ivony/Jumony 1.安装Jumony包 在N ...

  5. leetcode:Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  6. Longest Palindromic Substring-----最长回文子串

    首先讲讲什么是回文, 看看Wiki是怎么说的:回文,亦称回环,是正读反读都能读通的句子.亦有将文字排列成圆圈者,是一种修辞方式和文字游戏.回环运用得当.能够表现两种事物或现象相互依靠或排斥的关系, 比 ...

  7. Qt国际化相关类(以前没见过codec->toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())

    QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS ...

  8. Qt国际化相关类

    QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS ...

  9. python内置类型详细解释

    文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...

随机推荐

  1. JS高级——原型链

    构造函数 构造函数是特殊的函数,里面没有returen返回值 new的过程中,会自动将对象返回,不需要return new的过程中,会执行函数中的代码,会将创建的对象赋值给构造函数中的this 基本概 ...

  2. servlet的多线程并发问题

    package gz.itcast.e_thread; import java.io.IOException; import javax.servlet.ServletException; impor ...

  3. (二)Python 学习第二天--爬5068动漫图库小案例

    (注:代码和网站仅仅是学习用途,非营利行为,源代码参考网上大神代码,仅仅用来学习

  4. eclipse Errors during build

    eclipse在运行main方法或者运行ant里的clean方法时,总是会报下面的错,需要点击第二次才能正常运行 今天终于把这个问题解决了,解决方案如下 项目右键,点properties 点击buil ...

  5. yum进程被占用

    使用yum安装软件的时候出现,/var/run/yum.pid 已被锁定,PID 为 6503 的另一个程序正在运行的问题 [root@localhost mysql]# yum install gc ...

  6. HTML5轻松实现全屏视频背景

    想在你的网页首页中全屏播放一段视频吗?而这段视频是作为网页的背景,不影响网页内容的正常浏览.那么我告诉你有一款Javascript库正合你意,它就是Bideo.js. 参考网址: https://ww ...

  7. 【转】IDEA 中tomcat图片储存和访问虚拟路径

    1.idea 修改Tomcat的虚拟路径(第一种方法)修改配置文件有很多种,但是一直不成功;后来想还是idea的配置原因,这里tomcat虚拟路径只说一种; 修改Tomcat安装路径下server.x ...

  8. Android DynamicGrid:拖曳交换位置

     Android DynamicGrid:拖曳交换位置 Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:https://github ...

  9. mysql 数据的某个范围

    select * from table_name where limit num1, num2; num1 : 开始条目 num2 :选择数目

  10. 清北学堂模拟赛d5t6 cube

    题面有误!10,11,12操作类别为A,13,14,15类别为B,16,17,18类别为C. 分析:一道大暴力,每次记录一下走了多少步,上一步操作类别是啥就可以了.最后只需要写6种操作,每一次操作进行 ...