关闭

hihocoder 1039 字符消除 C++程序

标签: 算法程序设计C++OJhihocoder
228人阅读 评论(0) 收藏 举报
分类:

这是我的第一篇博客额。

今天花了一下午时间折腾这道题,并不是因为题有多难,而是因为花了很多时间去寻找优化算法,结果无功而返。最后还是用蛮力法AC过了。算发思路就是遍历插入地点和插入字符,计算出所有情况下的字符数,输出最大消除字符个数。

废话不说,直接上代码,希望时间比我少的同学能分享一下代码。

#include<iostream>
#include<string>


using namespace std;


/*
输入:一个字符串的引用
输出:按照消除规则消除的字符数
说明:由于参数为引用类型,函数会破坏输入字符串
*/
int getResult(string &s)
{
int ol = s.length();
int i = 0, flag = 1;
while (flag == 1)
{
flag = 0;
while (i < s.length())
{
if (s[i] == s[i + 1])
{
while (s[i] == s[i + 1])
s.erase(i + 1, 1);
s.erase(i, 1);
flag = 1;
}
else
i++;
}
i = 0;
}
return ol - s.length();
}


/*
输入:s一个字符串,第i个字符后面,添加字符c
输出:返回按照消除规则的消除字符个数
说明:函数功能为计算在s字符串的i个字符后添加指定字符c所形成的字符串按照消除规则消除的字符个数
*/


int getWithAddChar(string s, int i, char c)
{
s.insert(i, 1, c);
return getResult(s);


}


/*
输入:s一个字符串的引用,i添加字符位置
输出:按照消除规则消除如果在第i个字符后添加字符的最大字符数
说明:函数功能为计算在s字符串的i个字符后添加所有可能的字符后,最大的消除字符个数
*/


int getWithAddPos(string &s, int i)
{
int maxn = 0, ct = 0;


for (char x = 'A'; x < 'D'; x++)
{
ct = getWithAddChar(s, i, x);
if (ct>maxn)
maxn = ct;
}
return maxn;


}


/*
输入:s一个字符串的引用
输出:按照添加和消除规则所消除的最大字符数
说明:
*/
int getWithAddStrategy(string &s)
{
int maxn = 0, ct = 0;
for (int i = 0; i <= s.length(); i++)
{




ct = getWithAddPos(s, i);
if (ct > maxn)
maxn = ct;


}
return maxn;
}


int main()
{
int x, y;
string *s;


cin >> y;


x = y;


//根据第一行输入分配内存
if (cin&&x > 0)
s = new string[x];


else return -1;




while (cin&&x && (x<101))
{
//输入字符串
cin >> s[--x];


//输入检查
for (int i = 0; i < s[x].length(); i++)
{
if (s[x][i]<'A' || s[x][i]>'C')
return -1;
}
if (s[x].length()>100)
return -1;
}


//计算并输出
for (x = y - 1; x >= 0; --x)
cout << getWithAddStrategy(s[x]) << endl;


//释放内存
delete[] s;


return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6714次
    • 积分:198
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论