B——小明的作业
小明同学正在学习一种新的语言。在该语言中,如果出现了一次wa或者一次aw,则代表出现了一个警告。如果出现了连续的wa或者连续的aw,则代表出现了一个错误。小明由于学习比较粗心,所以他想要知道自己刚刚写完的作业中一共出现了多少处警告和错误。下面是小明刚刚写完的作业,请你帮助小明找到他一共出现了多少次警告和多少次错误。
abcwaawawawa中出现了一次警告(wa)和一次错误(awawaw)
abcdefg中没有出现一次警告和错误
waawwaawwawa中出现了四次警告(两次wa和两次aw)和一次错误(wawa)
awawwawa中只出现了两次错误(awaw和wawa)
小明的作业如下:
iawaswapwauawhawdwafwanbiopwanivgbikvblvbwawawawvolyuvgbololvolgbyolgyowagbolgawgboplwawaolgyolwaogblwaygbowawagwabwayawopwawagyowabwaowapjwapcfrtuywawacvujwawawaufttyfuftywawawatifgugbgbyguwawawawayugbigwwwytigwygwgbwyoawawgoghwaogwborgrewabouyhwabyuhowabhnwawauygbawyawuwaoawfcawaaaahwaywauwagwawefwaafmbawklawjiawihnwanhawawawawijwajiofjeriofgjrefjhwaewarwaowagwahwauwaiwarwaiwaqwarwahwaqwawwaowapfweofbwewafwahwaiwaewawwawawawawafwawawawaeiufwepfhnewfwahwajwatwafowawajtokshwawafwaiwahwafwahmgoewawawawafkfjkewnwawafiewhfwawawafjkernhawkrenwawawawafujnrheiowanwakawawawawwanoifewajrwaoawawfweojnwawawawawawawafjkwenawawferkwmpwawawawaforeijawawferhfiueorghwuwafguwegfwaghrwiufgwahweofgowaidwiweaiwwawieyiwe
分析:开一个栈 ,遇到a或w开头就进栈 ,若以a开头遇到w就存入以此类推,awa waw aw wa 警告串长度为2或3判断即可,若遇到aww(waa)…则需要重新计数(以最后的w(a)为开头从新作为起点入栈重复上述操作
!!还有一块注意的是,最后整个串循环完 栈不一定空,需要再判断
#include<bits/stdc++.h>
using namespace std;
vector<char> ans;
string s = "iawaswapwauawhawdwafwanbiopwanivgbikvblvbwawawawvolyuvgbololvolgbyolgyowagbolgawgboplwawaolgyolwaogblwaygbowawagwabwayawopwawagyowabwaowapjwapcfrtuywawacvujwawawaufttyfuftywawawatifgugbgbyguwawawawayugbigwwwytigwygwgbwyoawawgoghwaogwborgrewabouyhwabyuhowabhnwawauygbawyawuwaoawfcawaaaahwaywauwagwawefwaafmbawklawjiawihnwanhawawawawijwajiofjeriofgjrefjhwaewarwaowagwahwauwaiwarwaiwaqwarwahwaqwawwaowapfweofbwewafwahwaiwaewawwawawawawafwawawawaeiufwepfhnewfwahwajwatwafowawajtokshwawafwaiwahwafwahmgoewawawawafkfjkewnwawafiewhfwawawafjkernhawkrenwawawawafujnrheiowanwakawawawawwanoifewajrwaoawawfweojnwawawawawawawafjkwenawawferkwmpwawawawaforeijawawferhfiueorghwuwafguwegfwaghrwiufgwahweofgowaidwiweaiwwawieyiwe";
int sum1 , sum2;
int main()
{
for (int i = 0; s[i]; i ++ )
{
if (ans.empty())
{
if (s[i] == 'a' || s[i] == 'w') ans.push_back(s[i]);
}
else
{
char c = ans.back();
if (c == 'w')
{
if (s[i] == 'a') ans.push_back(s[i]);
else
{
if (s[i] == 'w') i --;
if (ans.size() == 2 || ans.size() == 3) sum1 ++;
else if (ans.size() > 3) sum2 ++;
ans.clear();
}
}
else if (c == 'a')
{
if (s[i] == 'w') ans.push_back(s[i]);
else
{
if (s[i] == 'a') i --;
if (ans.size() == 2 || ans.size() == 3) sum1 ++;
else if (ans.size() > 3) sum2 ++;
ans.clear();
}
}
}
}
if (ans.size() == 2 || ans.size() == 3) sum1 ++;
if (ans