水题,唯一考验操作水平的只有同级连续字符串最大值这一操作,解决方式如下:
int late=-1; //连续缺勤的次数
int max=0;//最长连续的L
//缺勤检验
for(int k=0;k<=temp.size()-1;k++)
{
if(temp[k]=='L'&&late==-1)
{
late=1;//当前是连续的第一个迟到记录
}
else if(temp[k]=='L'&&late!=-1)
{
//不为-1意味着当前不是第一个连续的迟到记录,所以直接加一就好
late++;
}
else if(temp[k]!='L')
{
//如果不为k,则直接清零重新计数
if(late>max)
max=late;
late=-1;
}
}
L.push_back(max);
全文代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char** argv) {
int num=0;
cin>>num;
vector<int> V;
vector<int> L;
for(int i=1;i<=num;i++)
{
string temp;
cin>>temp;
int count=0;// 缺勤次数
//缺勤检验
for(int j=0;j<=temp.size()-1;j++)
{
if(temp[j]=='A')
count++;
}
V.push_back(count);
int late=-1; //连续缺勤的次数
int max=0;//最长连续的L
//缺勤检验
for(int k=0;k<=temp.size()-1;k++)
{
if(temp[k]=='L'&&late==-1)
{
late=1;//当前是连续的第一个迟到记录
}
else if(temp[k]=='L'&&late!=-1)
{
//不为-1意味着当前不是第一个连续的迟到记录,所以直接加一就好
late++;
}
else if(temp[k]!='L')
{
//如果不为k,则直接清零重新计数
if(late>max)
max=late;
late=-1;
}
}
L.push_back(max);
}
for(int i=0;i<=num-1;i++)
{
if(V[i]<=1&&L[i]<3)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}