题意:
输入一段字符串,字符串中连续的三个相同的字符可以消去,消去后剩下的左右两段字符串拼接,求最多可消去次数。
输入:ATCCCTTG 输出:2
ATCCCTTG(消去CCC)——>ATTTG(消去TTT)——>AG
题解:
签到题,用栈模拟即可。
Code:
用栈模拟:
/*7ms*/
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int M=1e5+5; 4 int main() 5 { 6 string str; 7 while(!(cin>>str).eof()){ 8 char a[M]={}; 9 int head=0,sum=0; 10 a[++head]=str[0]; 11 a[++head]=str[1]; 12 for(int i=2;i<str.size();i++) 13 { 14 a[++head]=str[i]; 15 if(a[head]==a[head-1]&&a[head]==a[head-2]) 16 head-=3,sum++; 17 } 18 cout<<sum<<endl; 19 } 20 return 0; 21 }
直接string模拟:
/*68ms*/
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 string str; 6 cin>>str; 7 int len=str.length(),sum=0; 8 for(int i=0;i<str.length()&&str.length()>=3;i++){ 9 if(str[i]==str[i+1]&&str[i]==str[i+2]){ 10 sum++; 11 str.erase(str.begin()+i+2); 12 str.erase(str.begin()+i+1); 13 str.erase(str.begin()+i); 14 i=max(i-2,0); 15 i--; 16 } 17 } 18 cout<<sum<<endl; 19 return 0; 20 }