2019牛客多校训练第八场G.Gemstones(栈模拟)

 题目传送门

题意:

输入一段字符串,字符串中连续的三个相同的字符可以消去,消去后剩下的左右两段字符串拼接,求最多可消去次数。

输入: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 }

 

posted @ 2019-08-10 20:50  HOLLAY  阅读(208)  评论(0编辑  收藏  举报