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代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 string s; 4 int del(string p)//每次执行,字符就会消除一次,直到不能消除为止 5 { 6 int len=p.size(); 7 int lent; 8 if(len==0) return 0;//结束条件 9 string t="";//删除后剩余的加到t上 10 int l=0; 11 p+="#";//加一个标志位 12 for(int i=1;i<=len;i++) 13 { 14 if(p[i]!=p[i-1]) 15 { 16 if(l==i-1) t+=p[i-1]; 17 l=i; 18 } 19 } 20 if((lent=t.size())==len) return 0;//结束条件 21 return len-lent+del(t); 22 } 23 int main() 24 { 25 int T; 26 while(scanf("%d",&T)!=EOF) 27 { 28 while(T--) 29 { 30 cin>>s; 31 int ans=0,t; 32 int len=s.size(); 33 for(int i=0;i<=len;i++) 34 { 35 string temp=s; 36 temp.insert(i,"A"); 37 if((t=del(temp))>ans) ans=t; 38 temp=s; 39 temp.insert(i,"B"); 40 if((t=del(temp))>ans) ans=t; 41 temp=s; 42 temp.insert(i,"C"); 43 if((t=del(temp))>ans) ans=t; 44 } 45 cout<<ans<<endl; 46 } 47 } 48 return 0; 49 }
转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6618391.html
hihoCoder 1039:字符消除(字符串处理)相关推荐
- 1039 字符消除 java_Hihocoder 1039 字符消除
描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除, ...
- oracle 字符去除空格,oracle消除字符串空格 | 学步园
trim函数和replace函数可以解决这个问题. replace(str,' ','')就可以消除字符串中所有空格. trim函数 如果提到TRIM函数,最简单的功能就是使用它来去除字符串的行首和行 ...
- 写一个rtrim()函数消除字符串后面的空格字符。编main函数调用测试它。
写一个rtrim()函数消除字符串后面的空格字符.编main函数调用测试它. **提示信息:"请输入一个字符串:" **输出格式要求:"去掉右边的空格后为%s!\n&qu ...
- hihoCoder--1039:字符消除
描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除, ...
- 正则的实例用法,删除包含某些字符的字符串
a=re.findall('[a-z]system[a-z]', ': Control_7_ CodeSystem: GroupCodeSystem: IdSystem:'.lower()) re.s ...
- MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)
MySQL 常见的数据类型有字符串类型.数字类型.时间类型.二进制类型.具体的分类如下图: 1. 字符串类型 字符串类型用于存储字符和字符串数据,主要包含三种具体的类型:定长字符串.变长字符串以及字符 ...
- java.sql.Exception:setString 只能处理少于 32766 个字符的字符串
java.sql.Exception:setString 只能处理少于 32766 个字符的字符串 解决方式是 : 升级ojdbc的版本, 将原来的 ojdbc14_10.2.0.2.0.jar ...
- 《C#精彩实例教程》小组阅读07 -- C#字符与字符串
本微信图文详细介绍了C#中的字符与字符串.
- pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串、向所有字符串的左右两侧填充、直到宽度达到指定要求(both padding)
pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串.向所有字符串的左右两侧填充.直到宽度达到指定要求(both padding) 目录
最新文章
- 如何让采集的数据比原创还要原创!
- python实现rsa加密源代码_python实现RSA加密(解密)算法
- 用shell打印下面这句话中字母数小于6的单词
- 融云聊天 php_thinkphp整合系列之融云即时通讯在线聊天
- express ajax分页实例,DevExpress Navigator 数据分页 示例
- python lambda表达式及用法_Python:lambda表达式和yield关键字理解与使用讲解
- 百世快递收到纽交所退市警告!国内业务已68亿“卖身”
- 利用计算机形考试二,计算机应用基础形考试题
- mysql 传递数组_将数组传递给MySQL存储例程
- 假新闻无处不在:我开源了一个深度学习标记假新闻项目
- rango php,韩天峰(Rango)的博客
- CVE-2021-2429:MySQL InnoDB Memcached 插件中的堆缓冲区溢出漏洞详解
- SqlServer整库备份还原脚本
- 依赖注入框架Autofac的简单使用
- 无需软件,笔记本自带wifi功能,几条命令轻松搞定
- ORA-39194: Table mode jobs require the tables to be comma separated.
- 步履蹒跚的中国移动再现用户流失,中国电信成为最大受益者
- 计算机专业成功的普通人案例,普通人努力追梦的例子_平凡人的真实励志故事...
- 《测量心理学》技能部分考题分析
- OS和Linux笔记