您的位置:首页 > 其它

hihoCoder1039字符消除【字符串处理】

2018-03-07 13:46 501 查看


这道题并没有想到一些比较好的办法 思路挺简单的 就是简单的一个模拟:在每个可以插入的地方分别插入A,B,C,然后再模拟字符消除,得到一个分数,再取max。并不会超时。

要注意一下字符串处理的细节 这个不熟悉字符串的话挺容易发生一些奇奇怪怪的小错误的。我就调了好久QAQ.

另外用了个string里面的insert a.insert(pos,s) 表示在a[pos]前【pos似乎是个迭代器什么的 也没怎么搞懂原理 但是就是这么用】插入字符串s

#include<cstdio>
#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define MAXN 100
string a;
int Del(string s)
{
string temp="";//删掉之后的字符串
int len=s.length();
if(len==0) return 0;
for(int i=0;i<len;i++)
{
if(s[i]==s[i+1])
while(s[i]==s[i+1]&&i<len)//如果相同指针后移,不作处理
i++;
else temp+=s[i];//不同则不能删去,记录下来
}
if(temp.length()==len) return 0;
return len-temp.length()+Del(temp);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
cin>>a;
int ans=-1;
int N=a.length();
for(int i=0;i<N;i++)
{
string t=a;

t.insert(i,"A");
ans=max(ans,Del(t));
if(ans==N+1)break;
t=a;

t.insert(i,"B");
ans=max(ans,Del(t));
if(ans==N+1)break;
t=a;

t.insert(i,"C");
ans=max(ans,Del(t));
if(ans==N+1)break;
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: