hihoCoder 1039字符消除 (字符串处理)

http://hihocoder.com/problemset/problem/1039

因为字符串只由3种字母组成,并且插入的字符也只能是这三种字符的其中一个,那么可以考虑枚举这三个字符其中一个字符到字符串中任意一个位置。如果可以消除则不断消除,最后更新求得一个最大值。

首先介绍这个函数  substr    substr(start,length);  返回一个从指定位置开始,并具有指定长度的字符串。

start 必选。所需子字符串的起始位置,字符串的第一个字符的索引为0.

length可选项。返回子字符串中包含的字符数。

如果length为0或负数,将返回一个空字符串,如果没有指定该参数,则子字符串会延续到字符串的末尾。

 

 1 #include<iostream>
 2 #include<string>
 3 #include<cstdio>
 4 using namespace std;
 5 
 6 char in[3]={'A','B','C'};
 7 string getstring(string str)
 8 {
 9     int l=str.length();
10     if(l<=1) return str; //这里需要注意
11     string ss="";
12     for(int i=0;i<l-1;i++)
13     {
14         if(str[i]==str[i+1])
15         {
16             while(i+1<l&&str[i]==str[i+1]) i++;
17         }
18         else ss+=str[i];
19     }
20     if(str[l-1]!=str[l-2]) ss+=str[l-1];
21     return ss;
22 }
23 int main()
24 {
25     //freopen("a.txt","r",stdin);
26     int t,max;
27     string s;
28     cin>>t;
29     while(t--)
30     {
31         cin>>s;
32         max=0;
33         for(int i=0;i<s.length()-1;i++)
34         {
35             for(int j=0;j<3;j++)  //两重循环枚举。
36             {
37                 string str=s.substr(0,i+1)+in[j]+s.substr(i+1);
38                 int len=str.length();
39                 str=getstring(str);
40                 while(len>str.length())
41                 {
42                     len=str.length();
43                     str=getstring(str);
44                 }
45                 if(s.length()-len+1>max)  max=s.length()-len+1;
46             }
47         }
48         cout<<max<<endl;
49     }
50     return 0;
51 }

 

转载于:https://www.cnblogs.com/nowandforever/p/4415647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值