题目描述
小明同学正在学习一种新的语言。在该语言中,如果出现了一次wa或者一次aw,则代表出现了一个警告。
如果出现了连续的wa或者连续的aw,则代表出现了一个错误。小明由于学习比较粗心,所以他想要知道自己刚刚写完的作业中一共出现了多少处警告和错误。
下面是小明刚刚写完的作业,请你帮助小明找到他一共出现了多少次警告和多少次错误。
abcwaawawawa中出现了一次警告(wa)和一次错误(awawaw);abcdefg中没有出现一次警告和错误;waawwaawwawa中出现了四次警告(两次wa和两次aw)和一次错误(wawa);awawwawa中只出现了两次错误(awaw和wawa)
输入描述:
见备注
输出描述:
出现警告的次数
出现错误的次数
备注:
小明的作业如下:
iawaswapwauawhawdwafwanbiopwanivgbikvblvbwawawawvolyuvgbololvolgbyolgyowagbolgawgboplwawaolgyolwaogblwaygbowawagwabwayawopwawagyowabwaowapjwapcfrtuywawacvujwawawaufttyfuftywawawatifgugbgbyguwawawawayugbigwwwytigwygwgbwyoawawgoghwaogwborgrewabouyhwabyuhowabhnwawauygbawyawuwaoawfcawaaaahwaywauwagwawefwaafmbawklawjiawihnwanhawawawawijwajiofjeriofgjrefjhwaewarwaowagwahwauwaiwarwaiwaqwarwahwaqwawwaowapfweofbwewafwahwaiwaewawwawawawawafwawawawaeiufwepfhnewfwahwajwatwafowawajtokshwawafwaiwahwafwahmgoewawawawafkfjkewnwawafiewhfwawawafjkernhawkrenwawawawafujnrheiowanwakawawawawwanoifewajrwaoawawfweojnwawawawawawawafjkwenawawferkwmpwawawawaforeijawawferhfiueorghwuwafguwegfwaghrwiufgwahweofgowaidwiweaiwwawieyiwe
思路:
使用一个栈来保存字符串,当遍历到了一个不符合情况的字符,根据栈的长度进行判断。如果栈的长度为2或3,则此时有 awa、waw 、aw 、wa 四种情况,符合警告的定义。如果栈的长度大于3,则此时有awawaw…和wawawa…两种情况,符合错误的定义。注意如果栈顶为a,然后又遍历到一个a的时候,此时需要以当前的a作为起点继续遍历。分别统计个数即可。
AC代码:
#include <iostream>
#include <vector>
using namespace std;
string s="iawaswapwauawhawdwafwanbiopwanivgbikvblvbwawawawvolyuvgbololvolgbyolgyowagbolgawgboplwawaolgyolwaogblwaygbowawagwabwayawopwawagyowabwaowapjwapcfrtuywawacvujwawawaufttyfuftywawawatifgugbgbyguwawawawayugbigwwwytigwygwgbwyoawawgoghwaogwborgrewabouyhwabyuhowabhnwawauygbawyawuwaoawfcawaaaahwaywauwagwawefwaafmbawklawjiawihnwanhawawawawijwajiofjeriofgjrefjhwaewarwaowagwahwauwaiwarwaiwaqwarwahwaqwawwaowapfweofbwewafwahwaiwaewawwawawawawafwawawawaeiufwepfhnewfwahwajwatwafowawajtokshwawafwaiwahwafwahmgoewawawawafkfjkewnwawafiewhfwawawafjkernhawkrenwawawawafujnrheiowanwakawawawawwanoifewajrwaoawawfweojnwawawawawawawafjkwenawawferkwmpwawawawaforeijawawferhfiueorghwuwafguwegfwaghrwiufgwahweofgowaidwiweaiwwawieyiwe";
int main(){
vector<char> stk;
int ans1=0,ans2=0;
for(int i=0;i<s.size();i++){
if(stk.empty()){
if(s[i]=='a' || s[i]=='w') stk.push_back(s[i]);
}else{
char now=stk.back();
if(now=='w'){
if(s[i]=='a') stk.push_back(s[i]);
else{
if(s[i]=='w') i--;//保证不会由于判断前一个而漏了一个'a'或'w'
if(stk.size()==2 || stk.size()==3) ans1++;
else if(stk.size()>3) ans2++;
stk.clear();
}
}else if(now=='a'){
if(s[i]=='w') stk.push_back(s[i]);
else{
if(s[i]=='a') i--;//保证不会由于判断前一个而漏了一个'a'或'w'
if(stk.size()==2 || stk.size()==3) ans1++;
else if(stk.size()>3) ans2++;
stk.clear();
}
}
}
}
if(stk.size()>3) ans2++;
else if(stk.size()==2 || stk.size()==3) ans1++;//确保最后末尾的错误或警告能够得到判断。例如如果最后两个字母是wa,没有这两句判断的话,结果ans1会少 1 。
cout<<ans1<<endl<<ans2<<endl;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103325.html