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 }