hihoCoder 1039:字符消除(字符串处理)
#1039 : 字符消除
描述
小Hi最近在玩一个字符消除游戏。给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的:
1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串。例如"ABCCBCCCAA"中"CC","CCC"和"AA"会被同时消除,余下"AB"和"B"拼成新的字符串"ABB"。
2)上述消除会反复一轮一轮进行,直到新的字符串不包含相邻的相同字符为止。例如”ABCCBCCCAA”经过一轮消除得到"ABB",再经过一轮消除得到"A"
游戏中的每一关小Hi都会面对一个字符串s。在消除开始前小Hi有机会在s中任意位置(第一个字符之前、最后一个字符之后以及相邻两个字符之间)插入任意一个字符('A','B'或者'C'),得到字符串t。t经过一系列消除后,小Hi的得分是消除掉的字符的总数。
请帮助小Hi计算要如何插入字符,才能获得最高得分。
输入
输入第一行是一个整数T(1<=T<=100),代表测试数据的数量。
之后T行每行一个由'A''B''C'组成的字符串s,长度不超过100。
输出
对于每一行输入的字符串,输出小Hi最高能得到的分数。
提示
第一组数据:在"ABCBCCCAA"的第2个字符后插入'C'得到"ABCCBCCCAA",消除后得到"A",总共消除9个字符(包括插入的'C')。
第二组数据:"AAA"插入'A'得到"AAAA",消除后得到"",总共消除4个字符。
第三组数据:无论是插入字符后得到"AABC","ABBC"还是"ABCC"都最多消除2个字符。
- 样例输入
-
3
ABCBCCCAA
AAA
ABC - 样例输出
-
9
4
2
题目链接:https://hihocoder.com/problemset/problem/1039
好吧,这题本身就是一道谷歌公司的面试题,虽然难度等级LV1,但。。。还是好难!!!
这道题思路是:在原字符串上的每个位置添加上A或B或C,然后去消除。因为字符串只由3种字母组成,并且插入的字符也只能是这三种字符的其中一个,那么可以考虑枚举这三个字符其中一个字符到字符串中任意一个位置。如果可以消除则不断消除,最后更新求得一个最大值。
这道题我不得不介绍一种函数-insert,在原有的字符串上插入一个字符!就是选定第i个位置,在第i个位置之后插入一个字符!函数写法为temp(字符串).insert(i,"某一字符");
下面给出AC代码:#include <bits/stdc++.h>
using namespace std;
string s;
int del(string p)//每次执行,字符就会消除一次,直到不能消除为止
{
int len=p.size();
int lent;
if(len==) return ;//结束条件
string t="";//删除后剩余的加到t上
int l=;
p+="#";//加一个标志位
for(int i=;i<=len;i++)
{
if(p[i]!=p[i-])
{
if(l==i-) t+=p[i-];
l=i;
}
}
if((lent=t.size())==len) return ;//结束条件
return len-lent+del(t);
}
int main()
{
int T;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
cin>>s;
int ans=,t;
int len=s.size();
for(int i=;i<=len;i++)
{
string temp=s;
temp.insert(i,"A");
if((t=del(temp))>ans) ans=t;
temp=s;
temp.insert(i,"B");
if((t=del(temp))>ans) ans=t;
temp=s;
temp.insert(i,"C");
if((t=del(temp))>ans) ans=t;
}
cout<<ans<<endl;
}
}
return ;
}
hihoCoder 1039:字符消除(字符串处理)的更多相关文章
- hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- hihoCoder 1039字符消除 (字符串处理)
http://hihocoder.com/problemset/problem/1039 因为字符串只由3种字母组成,并且插入的字符也只能是这三种字符的其中一个,那么可以考虑枚举这三个字符其中一个字符 ...
- [hihoCoder]#1039 : 字符消除
Description 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些 ...
- hihoCoder 1039 字符消除 最详细的解题报告
题目来源:字符消除 解题思路: 1.在给定字符串中的任意位置插入'A'.'B'.'C'中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度: 2.在计算字符消除后最短长度时,智能一遍一遍的 ...
- 【hihoCoder】#1039 : 字符消除 by C solution
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- 【hihoCoder】1039 : 字符消除
题目:http://hihocoder.com/problemset/problem/1039 给定一个字符串s,只包含'A', 'B', 'C'三种字符 1. 向 s 的任意位置 (包括头和尾) 中 ...
- [HIHO1039]字符消除(字符串,枚举,模拟)
题目链接:http://hihocoder.com/problemset/problem/1039 思路:枚举所有字符更新的位置和ABC三种修改方案,之后再模拟消除规则,一步一步去消除.直到无法消除, ...
- 【HIHOCODER 1039】 字符消除
链接 问题描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被 ...
- hihoCoder#1039
刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在 ...
随机推荐
- JavaWeb之ssm框架整合,用户角色权限管理
SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...
- CSS line-height概念与举例
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/37 定义 两行文字基线之间的距离. 基线的大体位置 基线的位置可 ...
- java中可变长参数
** * Created by Lenovo on 2017/12/10. * java中可变长参数 */ public class reflect04 { //m1有一个int类型的可比变长参数 / ...
- EL表达式隐式对象
用户输入界面 ---------------------------------------------------------------------------------------- < ...
- 随手记一下,VS2015卡顿问题解决。
不知道什么开始,vs2015卡顿的很,启动时加载项目很慢,调试是启动慢,停止调试时直接卡死半分钟.其他都还能忍受,最不能忍受的是点击停止调试按钮后十几秒没反应! 网上有解决方案如下几个,我试了,都不行 ...
- css自适应
一.顶部标题自适应 <html> <head> <title>顶部标题</title> <style> body{padding:0;mar ...
- Robot Framework学习笔记(八)------ride标签使用
一.edit标签使用 1.导入库 点击 Edit 标签页右侧的"Library"按钮,来添加库.在添加库之前,首先库已经在 Python 下进行了安装.如,添加"Sele ...
- js小知识-replace的回调函数
replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串.模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数. 注意:原字符串不会改变. ...
- shell 变量的间接引用
参考: 高级 bash 脚本编程指南 eval var1=\$$var2 变量间接引用 贴个脚本: server1=1.1.1.1 server2=1.1.1.2 server3=1.1.1.3 fo ...
- socket对象放在一个datagridview的row的tag里面在拿出来 为什么是已释放
socket对象放在一个datagridview的row的tag里面在拿出来 为什么是已释放