计蒜客T1266——出勤记录

计蒜客T1266——出勤记录_第1张图片

水题,唯一考验操作水平的只有同级连续字符串最大值这一操作,解决方式如下: 

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 
#include 
#include 
using namespace std;

int main(int argc, char** argv) {
	
	int num=0;
	cin>>num;
	
	vector V;
	vector 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"<

计蒜客T1266——出勤记录_第2张图片

 

你可能感兴趣的:(计蒜客详解,c++,算法)