#2 double u 费了我一半时间,终于写出来了。(模拟) 思路&代码:先将所有w和m全部变成"uu""nn",存到ch字符数组中,再将只含u、n和除w、m以外的小写字母按顺序跑一遍,合并其中的uu、nn,知道ans==ch长度为止。 "uwu"->"u uu u"->"uu uu"->"ww" 这样避免重复讨论,从而简化代码量,降低本题复杂程度
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int T,s;
string r;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&s);
cin>>r;
char ch[N];
int len=r.size(),p=0;
for(int i=0;i<len;++i){
if((r[i]=='w'||r[i]=='m')){
if(r[i]=='w') {
ch[p++]='u';
ch[p++]='u';
}
if(r[i]=='m') {
ch[p++]='n';
ch[p++]='n';
}
}
else ch[p++]=r[i];
}
char v=ch[0];
int ans=s,z=0;
bool done=false;
for(int i=0;i<p;++i){
if(ans==p) done=true;
if(((v=='u'&&ch[i]=='u')||(v=='n'&&ch[i]=='n'))&&i>0&&ans<p&&!done&&!z){
if(v=='u') cout<<'w';
if(v=='n') cout<<'m';
z=2;
ans++;
}
else{
if(!((ch[i]=='u'&&ch[i+1]=='u')||(ch[i]=='n'&&ch[i+1]=='n'))||done) cout<<ch[i];
}
v=ch[i];
if(z) z-=1;
}
puts("");
}
return 0;
}