有一个程序员写了个自动处理字符串的代码,规则有两条:①如果有aabb型子串,改为aab;②如果有ccc型子串,改为cc。让我们复现程序员的代码。
helllo
wooooooow
AABBCC
输出:
hello
wooc
AABCC
题意是动态的处理。当前处理后,接下来的处理就在此字符串之上。
两个规则,对字符串的处理是相同的,当满足任意一个规则时,忽略当前字符串
首先定义好两个规则,注意有传入两个参数,一个是当前字符串,另一个是动态的结果字符串。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
bool rule1(char c, string & str)
{
int len = str.size();
if (len>=2 && (str[len-1]==str[len-2]) && (str[len-1]==c))return true;
return false;
}
bool rule2(char c, string& str)
{
int len = str.size();
if (len>=2 && (str[len-3]==str[len-2]) && (str[len-1]==c) && (str[len-1]!=str[len-2]) )return true;
return false;
}
int main()
{
int n;
cin>>n;
while(n--)
{
string t;
cin>>t;
string ans = ""; // note, ans's length is always smaller than c , the margin is 1.
for (int i=0;i<t.size();i++)
{
if (!rule1(t[i],ans) && !rule2(t[i],ans))
{
// cout<<"--"<<endl;
ans += t[i];
}
}
cout<<ans<<endl;
}
getchar();
getchar();
return 0;
}