链接: link.
这道题单向双指针遍历,定义一个i指针,一个j指针,i指针搜索到符合warn的字符,然后停下i指针,j指针移动,j指针是在符合i指针的情况下继续向右走,直到不符合为止,两两检查,如果i指针所指成对字符中第二个字符不符合条件,不满足warn,仍然需要i++,写的时候注意分好情况,不然,会陷入死循环
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
string s="iawaswapwauawhawdwafwanbiopwanivgbikvblvbwawawawvolyuvgbololvolgbyolgyowagbolgawgboplwawaolgyolwaogblwaygbowawagwabwayawopwawagyowabwaowapjwapcfrtuywawacvujwawawaufttyfuftywawawatifgugbgbyguwawawawayugbigwwwytigwygwgbwyoawawgoghwaogwborgrewabouyhwabyuhowabhnwawauygbawyawuwaoawfcawaaaahwaywauwagwawefwaafmbawklawjiawihnwanhawawawawijwajiofjeriofgjrefjhwaewarwaowagwahwauwaiwarwaiwaqwarwahwaqwawwaowapfweofbwewafwahwaiwaewawwawawawawafwawawawaeiufwepfhnewfwahwajwatwafowawajtokshwawafwaiwahwafwahmgoewawawawafkfjkewnwawafiewhfwawawafjkernhawkrenwawawawafujnrheiowanwakawawawawwanoifewajrwaoawawfweojnwawawawawawawafjkwenawawferkwmpwawawawaforeijawawferhfiueorghwuwafguwegfwaghrwiufgwahweofgowaidwiweaiwwawieyiwe";
// s="iawaswapwauawhawd";
int warn=0,erro=0,i,j;
for(i=0;i<s.size();){
if(s[i]=='a'){
if(s[i+1]=='w'){
bool f=false;
for(j=1;;j++){
if(s[i+j*2]=='a'&&s[i+2*j+1]=='w'){
f=true;
}
else break;
}
if(f){
erro++;
i+=2*j;
}
else{
warn++;
i+=2;
}
}
else i++;
}
else if(s[i]=='w'){
if(s[i+1]=='a'){
bool f=false;
for(j=1;;j++){
if(s[i+j*2]=='w'&&s[i+2*j+1]=='a'){
f=true;
}
else break;
}
if(f){
erro++;
i+=2*j;
}
else{
warn++;
i+=2;
}
}
else i++;
}
else{
i++;
}
}
cout<<warn<<endl<<erro;
}