【hihoCoder】1039 : 字符消除
题目:http://hihocoder.com/problemset/problem/1039
给定一个字符串s,只包含'A', 'B', 'C'三种字符
1. 向 s 的任意位置 (包括头和尾) 中插入'A', 'B', 'C'中任意一个字符
2. 递归删除 s 中的相同字符,要求第1步的插入位置使得消除的字符最多
递归删除: "ABCCBCCCAA"->"ABB"->"A'
思路
1. 枚举:向 s 中插入一个字符获得新字符串s', 计算s' 可以删除的字符
2. 递归删除
- 用stack<Segment>存储每次可以删除的位置。利用先进后出,在删除的时候不用重新计算位置
源码
#include <string>
#include <stack>
#include <iostream>
using namespace std; struct Segment
{
Segment(int _s, int _e){ start = _s; end = _e; }
int start;
int end;
}; int remove(string& str)
{
stack<Segment> segments;
int i, j, strLen, score;
i = , j = , score = ;
strLen = str.length();
while (j < strLen)
{
if (str[i] == str[j])
++j;
if (j >= strLen || str[i] != str[j])
{
if (j - i > )
segments.push(Segment(i, j));
i = j;
j = i + ; }
if (j >= strLen)
{
if (segments.empty())
break;
while (!segments.empty())
{
Segment tmp = segments.top();
segments.pop();
str.erase(str.begin() + tmp.start, str.begin() + tmp.end);
score = score + tmp.end - tmp.start;
}
i = ;
j = ;
strLen = str.length();
}
}
return score;
}
int main()
{
int cnt, strLen, i, j, score;
string str; cin >> cnt;
while (cnt-- > )
{
cin >> str;
score = ;
strLen = str.length();
for (i = ; i < strLen; i++)
{
for (char cha = 'A'; cha <= 'C'; cha++){
string tmp = str;
tmp.insert(i, &cha);
j = remove(tmp);
if (j > score)
score = j;
}
}
cout << score<< endl;
}
return ;
}
【hihoCoder】1039 : 字符消除的更多相关文章
- hihoCoder 1039:字符消除(字符串处理)
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- [hihoCoder]#1039 : 字符消除
Description 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些 ...
- hihoCoder 1039 字符消除 最详细的解题报告
题目来源:字符消除 解题思路: 1.在给定字符串中的任意位置插入'A'.'B'.'C'中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度: 2.在计算字符消除后最短长度时,智能一遍一遍的 ...
- hihoCoder 1039字符消除 (字符串处理)
http://hihocoder.com/problemset/problem/1039 因为字符串只由3种字母组成,并且插入的字符也只能是这三种字符的其中一个,那么可以考虑枚举这三个字符其中一个字符 ...
- 【hihoCoder】#1039 : 字符消除 by C solution
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- 【hihocoder 1039 字符串消除】模拟
题目链接:http://hihocoder.com/problemset/problem/1039 题意:给定一个只由{A, B, C}组成的字符串s,长度为n, 故包含n+1个空隙:现要求在某个空隙 ...
- 【HIHOCODER 1039】 字符消除
链接 问题描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被 ...
- hihoCoder#1039
刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在 ...
随机推荐
- Solr的主界面加登录权限
如题:效果如下图zu 只需两步: 1.tomcat-users.xml 下添加 <user username="admin" password="new-pas ...
- 0、Web基本概念
一.Web的概念: 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思. 二.Web的分类:Internet上供外界访问的Web资源分为静态Web资源和动态Web资源两种. 1.静态Web资源:W ...
- [Python] Python学习笔记之常用模块总结[持续更新...]
作为一种极其简单的编程语言,Python目前成为了最炙手可热的几种语言之一.它不仅简单易学,而且它还为用户提供了各种各样的模块,功能强大,无所不能.有利必有弊,学习Python同样有困扰,其中之一就是 ...
- Computer Vision: OpenCV, Feature Tracking, and Beyond--From <<Make Things See>> by Greg
In the 1960s, the legendary Stanford artificial intelligence pioneer, John McCarthy, famously gave a ...
- JavaScript URL编码转换函数 encodeURIComponent()
encodeURIComponent()定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法:encodeURIComponent(URIstring ...
- Java总结篇系列:Java多线程(一)
多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程 ...
- idea key
sublime 3 —– BEGIN LICENSE —– Fred Zirdung Single User License EA7E-844672 6089C0EC 22936E1A 1EADEBE ...
- 局域网中共享Lantern上网
Lantern作为一款非常好用的上网软件,深受大家喜爱,但是由于目前没有ios版,所以iPhone用户上网很麻烦,这里介绍一下如何共享Lantern使局域网内的设备都能正常上网. 1.电脑端设置:右键 ...
- angularjs里对JS的lowercase和uppercase的完善
读angularjs的源码开头. var lowercase = function (string) { return isString(string) ? string.toLowerCase() ...
- java20
1:递归(理解) (1)方法定义中调用方法本身的现象 举例:老和尚给小和尚讲故事,我们学编程 (2)递归的注意事项: A:要有出口,否则就是死递归 B:次数不能过多,否则内存溢出 C:构造方法不能递归 ...